【发布时间】:2018-10-09 16:44:37
【问题描述】:
我正在创建 2 个用户之间的聊天系统。 我的聊天表看起来像这样:(这是架构:SQL Fiddle)
--------------------------------------------------------------------------------
| message_id | sender_id | receiver_id | message_text | date |
--------------------------------------------------------------------------------
| 1 | 20 | 100 | Hello mate | 2018-04-29 12:15:33 |
--------------------------------------------------------------------------------
| 2 | 100 | 20 | Hi there | 2018-04-29 13:20:05 |
--------------------------------------------------------------------------------
| 3 | 13 | 44 | Alright | 2018-04-29 14:35:15 |
--------------------------------------------------------------------------------
| 4 | 20 | 57 | Hi user 57 | 2018-04-29 16:44:34 |
--------------------------------------------------------------------------------
我想从用户参与的每个聊天中获取最后消息的行,因此在上面的示例中,用户 20 应该得到 2 行: message_id 2 的行(因为他正在与用户 100 聊天,尽管他没有发送最后一条消息),以及 message_id 4 的行(因为他向用户 57 发送了消息) 它基本上就像 WhatsApp,您始终可以在顶部看到任何聊天的第一条消息。
问题是,如果用户是发件人,我只能得到最后一条消息,如果他是接收者,则不能:
SELECT * FROM chat
WHERE message_id IN
(SELECT MAX(message_id) FROM chat WHERE sender_id=:sender_id
GROUP BY receiver_id) ORDER BY date DESC
我想我应该添加另一列“chat_id”,该列对于同一聊天中的每 2 个用户来说是一个相同的数字(因此用户 100 和 20 将具有相同的 chat_id,无论他们是发送者还是接收者,并且在这个例子中,用户 13 和 44 会有不同),
或者,有更好的选择吗?
【问题讨论】:
-
基于示例数据的预期输出是什么?