mysql - 需要帮助 复杂的 MySQL 多查询语句

标签 mysql sql

我不太习惯使用 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/

相关文章:

php - 比较 2 个表并根据条件更新一个表

mysql - 统计特定月份每天的所有记录

sql - 从相关表中删除条目

php - SQL PHP 检索特定商店的总金额

mysql - 当我们在 SQL 查询中使用 "group by 1"是什么意思

php - 如何避免在查询中包含子句?

php - 使用 Kohana 3,我如何从数据库类中获取最后一个插入 ID?

mysql - 使用 LEFT JOIN 在 MySQL 中查找孤立记录

javascript - 图片从上传文件夹插入数据库

mysql - sql,计算每个事件祖先的 child 数量