我有3个聊天应用程序的桌子
chatRooms(id)
chatMessages(id,roomId,userId,消息)
userData(用户ID,昵称)
如何加载带有nickNames的chatMessages的所有chatRoom?
我试过了:
$qry = $db->prepare('SELECT
chatRooms.id,
chatMessages.message,
userData.nickName
FROM chatRooms
LEFT JOIN chatMessages
ON chatMessages.roomId = chatRooms.id
LEFT JOIN userData
ON chatMessages.userId = userData.userId '
);
$qry->execute();
但这似乎对我不起作用:C
我想以聊天名称显示在chatRoom中的所有用户
因此,如果小组中有3个人(弗雷德,乔,贝恩),那么我莫名其妙地需要一个阵列。对于每个数组元素(chatRoom)
最佳答案
您的第一个LEFT JOIN很可能返回多个行。
根据您的问题,您的“ chatMessages”表中也包含一个userId。您还应该以此过滤。
为此,您需要:
在chatMessages之前加入userData
将userData中的userId包括在chatMessages的LEFT JOIN中
$qry = $db->prepare('SELECT
chatRooms.id,
chatMessages.message,
userData.nickName
FROM chatRooms
LEFT JOIN userData
ON chatMessages.userId = userData.userId
LEFT JOIN chatMessages
ON chatMessages.roomId = chatRooms.id AND chatMessages.userId = userData.userId');
$qry->execute();