Php 获取唯一用户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

我一点也不知道如何开始:

我的消息表结构如下所示:

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