我不太习惯使用 MySQL,并且在解决正确的查询以获得正确的结果时遇到问题。
我有这些表
CONVERSATIONS
- id, name
MESSAGES
- id, message, conversation_id, user_id
PARTICIPANTS
- id, conversation_id, user_id
USERS
- id, username
我想获取用户参与的所有对话。 然后结果将包括作为父对象的 CONVERSATIONS_OBJECT、最后/最新的 MESSAGES_OBJECT(仅 1)以及所有参与者。
结果示例:
[ // PARENT ARRAY
{ // CONVERSATION OBJECT
last_message: {}, // THE VERY LAST MESSAGE FOR THIS CONVERSATION
participants: // ALL PARTICIPANTS FOR THIS CONVERSATION
[
{user1}, {user2} // USERS OBJECT ARRAY
]
},
{ // CONVERSATION OBJECT
last_message: {}, // THE VERY LAST MESSAGE FOR THIS CONVERSATION
participants: // ALL PARTICIPANTS FOR THIS CONVERSATION
[
{user1}, {user2} // USERS OBJECT ARRAY
]
},
{ // CONVERSATION OBJECT
last_message: {}, // THE VERY LAST MESSAGE FOR THIS CONVERSATION
participants: // ALL PARTICIPANTS FOR THIS CONVERSATION
[
{user1}, {user2} // USERS OBJECT ARRAY
]
}
]
最佳答案
你可以这样做:
SELECT
u.username,
c.name AS ConversationName,
pu.username AS ParticipantName
FROM users as u
LEFT JOIN
(
SELECT user_id, MAX(conversation_id) AS Latestconversation_id
FROM participants
GROUP BY user_id
) AS p ON u.id = p.user_id
LEFT JOIN CONVERSATIONS AS c ON c.id = p.Latestconversation_id
LEFT JOIN users as up ON up.id = p.user_id;
关于mysql - 需要帮助 复杂的 MySQL 多查询语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39388119/