我有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();

09-07 17:37