Php 在消息数据库表中获取不同的用户

Php 在消息数据库表中获取不同的用户,php,mysql,sql,Php,Mysql,Sql,对于具有以下结构的消息表 id, sender_id, receiver_id, text 我想建立一个不同用户的列表(按消息id排序),这些用户要么向当前会话持有者发送消息,要么从当前会话持有者接收消息。列表应只包含一个用户一次 查询,例如: "SELECT * FROM messages WHERE sender_id = '$sess_id' OR receiver_id = '$sess_id'"; 产生重复项,即同一用户有多行。是否必须在SQL查询之后进行过滤,或者是否有SQL查询

对于具有以下结构的
消息

id, sender_id, receiver_id, text
我想建立一个不同用户的列表(按消息id排序),这些用户要么向当前会话持有者发送消息,要么从当前会话持有者接收消息。列表应只包含一个用户一次

查询,例如:

"SELECT * FROM messages WHERE sender_id = '$sess_id' OR receiver_id = '$sess_id'";
产生重复项,即同一用户有多行。是否必须在SQL查询之后进行过滤,或者是否有SQL查询将生成所需的唯一列表

谢谢

你可以做:

SELECT sender_id
FROM   messages
WHERE  receiver_id = '$sess_id'
UNION
SELECT receiver_id
FROM   messages
WHERE  sender_id = '$sess_id'

您还可以使用distinct关键字:

SELECT distinct sender_id
FROM   messages
WHERE  receiver_id = '$sess_id'
UNION
SELECT distinct receiver_id
FROM   messages
WHERE  sender_id = '$sess_id'
更多信息可在此处找到:

MySQL允许您引用GROUP BY子句中的列别名,因此您也可以简单地执行以下操作:

…
GROUP BY user_id
…

或者
从发送方id='$sess_id'或接收方id='$sess_id'的邮件中选择不同的发送方id、接收方id是否应该将“HAVING”改为“WHERE”?…第二个似乎不能完全满足我的要求。第一个当然可以……谢谢@algorithmicCoder:它不会按消息id对结果集排序,但除此之外,这个答案确实提供了一个非常干净的解决方案。我相信他删除了我提到的第二个选项。正如您所说,此选项确实提供了一个干净的解决方案…并且它足够简单,可以通过添加订单…谢谢!
…
GROUP BY user_id
…