我有一个问题,似乎很容易解决,但不是。
我有一个mysql数据库,它存储用户、聊天会话和用户的聊天行。
以下是我数据库的uml模式的一部分:
在聊天室会话中,我们只存储所有会话id(自动递增)
在chat\u sessions\u成员中,我们存储所有用户会话
在chat\u行中,我们存储所有chat\u会话行
例子:
问题是如何获取特定用户的会话,同时获取最后一行(如果存在)。
我的最后一次尝试给出了以下代码:
SELECT `chat_sessions_members`.`session_id`, ANY_VALUE(`send_at`) AS `send_at`, ANY_VALUE(`line`) AS `line`
FROM `chat_sessions_members`
LEFT JOIN `chat_lines` ON `chat_sessions_members`.`session_id` = `chat_lines`.`session_id`
WHERE `user_id` = '1'
GROUP BY `session_id`
ORDER BY DATE(`send_at`) DESC
但这不是一个有序的答复。
我知道很多关于这个的帖子,但我不完全理解。
1条答案
按热度按时间8ulbf1ek1#
如果我理解正确的话,您需要为具有给定用户的每个会话的最后一行(最近的一行)。如果是的话,你可以用
ROW_NUMBER()
识别最后一行LEFT JOIN
要识别用户: