Php 获取唯一用户ID以获取具有最新对话的用户列表
我想获取与我进行最新对话的用户ID 我一点也不知道如何开始: 我的消息表结构如下所示:Php 获取唯一用户ID以获取具有最新对话的用户列表,php,mysql,Php,Mysql,我想获取与我进行最新对话的用户ID 我一点也不知道如何开始: 我的消息表结构如下所示: id | msg_from_uid | msg_to_uid | msg_text | msg_date ---------------------------------------------------- 1 | 8 | 3 | hello | 2018-03-12 12:00:00 2 | 3 | 8 |
id | msg_from_uid | msg_to_uid | msg_text | msg_date
----------------------------------------------------
1 | 8 | 3 | hello | 2018-03-12 12:00:00
2 | 3 | 8 | hello | 2018-03-12 12:11:00
3 | 8 | 5 | hello | 2018-03-12 12:12:00
4 | 5 | 8 | hello | 2018-03-12 12:13:00
5 | 8 | 7 | hello | 2018-03-12 12:14:00
6 | 7 | 8 | hello | 2018-03-12 12:15:00
假设我的用户id是8,那么如何在最新的会话顺序中获得不同的id 3、5、7
我只想要唯一的用户ID。这样,我就可以在左侧边栏面板中列出它们,以查看我最近与谁进行了对话
我的预期产出:
仅显示最新对话日期顺序中的用户ID:
user_id
----
7
5
3
任何帮助都将不胜感激。一个选择是使用最小/最大的技巧查找每个对话的最新记录。这是在下面标记为
t2
的子查询中完成的。然后,我们可以将原始表连接到此子查询以获取完整记录。最后,为了获得您想要的交易对手ID,我们可以选择与8(源)不匹配的用户ID
编辑:如果您只需要对应于最新对话的对方的用户ID,那么实际上可能不需要加入。但是我上面给出的查询将来可能对您有用,例如,如果您还想从每对用户之间的最新对话中获取文本。您可以通过使用msg\u date在DESC中对查询进行排序来获取最新对话
select * from msg where msg_from_uid = 8 group by msg_to_uid order by msg_date DESC
这样,您将获得唯一的用户ID和最新消息。希望下面的解决方案能够帮助您解决问题
select * from ( SELECT distinct(msg_from_uid), msg_date FROM message where msg_to_uid = 8 UNION SELECT distinct(msg_to_uid), msg_date FROM message where msg_from_uid = 8 ) a group by msg_from_uid order by msg_date desc
输出将是
msg_from_uid msg_date
3 2018-03-12 12:15:00
5 2018-03-12 12:13:00
7 2018-03-12 12:11:00
你的预期产出是多少?您想查看涉及用户8的最新对话,还是想查看涉及用户8的所有对话的有序列表(在这种情况下,您将获得6条记录)?您好,我编辑了我的问题,我已经提到了我的预期输出。如果您想要消息发送到的用户ID,即从msg_到uid列的用户ID,那么您可以使用@smit Raval answer的查询,如
选择msg_到uid from message,其中msg_from_uid=8按msg_date DESC排序
,效果非常好,谢谢。但我必须从技术上一步一步地理解它,它是如何工作的!。太棒了!:-)
msg_from_uid msg_date
3 2018-03-12 12:15:00
5 2018-03-12 12:13:00
7 2018-03-12 12:11:00