mysql – 列出所有用户按对话排序的消息
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 列出所有用户按对话排序的消息,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2107字,纯文字阅读大概需要4分钟。
内容图文
![mysql – 列出所有用户按对话排序的消息](/upload/InfoBanner/zyjiaocheng/909/d2266311ad9e4c0c8d8f22c39600d8ec.jpg)
我的用例是一个管理视图,用于查看数据库中的所有消息.
我想要一个按对话和开始日期排序的消息列表,其目的是能够在其上下文中查看每条消息.
对话是两个用户之间的交互列表.
我没有会话表,只有一个消息表.
从这个数据样本:
id sender recipient
--------------------------
1 marc rémi
2 gépéto sylvain
3 rémi marc
4 julie georgette
5 rémi marc
6 denis julie
7 julie rémi
8 sylvain gépéto
9 denis marc
10 denis julie
我想获得:
id sender recipient
--------------------------
1 marc rémi
3 rémi marc
5 rémi marc
2 gépéto sylvain
8 sylvain gépéto
4 julie georgette
6 denis julie
10 denis julie
7 julie rémi
9 denis marc
就目前而言,我更简单地希望获得每个对话的第一条消息,作为迈向通缉结果的第一步:
SELECT message.id, message.sender , message.recipient
FROM message
GROUP BY message.sender, message.recipient
HAVING message.id = min(message.id)
ORDER BY message.id DESC;
但我无法做到这一点,我得到两个对话,而不是一个所有双向对话:
id sender recipient
--------------------------
8 sylvain gépéto
2 gépéto sylvain
所以,我被困在这里……我会很感激一些提示!
差点忘了:SQL Fiddle with the sample and the last query
解决方法:
您可以使用以下查询来获取每个对话的第一条消息的ID:
SELECT MIN(id),
IF(sender > recipient, sender, recipient) AS participantA,
IF(sender > recipient, recipient, sender) AS participantB
FROM message
GROUP BY participantA, participantB
现在在派生表中使用上面的查询来获得所需的结果:
SELECT id, sender, recipient
FROM (
SELECT id, sender, recipient,
IF(sender > recipient, sender, recipient) AS participantA,
IF(sender > recipient, recipient, sender) AS participantB
FROM message) AS t1
INNER JOIN (
SELECT MIN(id) AS minId,
IF(sender > recipient, sender, recipient) AS participantA,
IF(sender > recipient, recipient, sender) AS participantB
FROM message
GROUP BY participantA, participantB
) AS t2 ON t1.participantA = t2.participantA AND t1.participantB = t2.participantB
ORDER BY t2.minId
内容总结
以上是互联网集市为您收集整理的mysql – 列出所有用户按对话排序的消息全部内容,希望文章能够帮你解决mysql – 列出所有用户按对话排序的消息所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。