2011-08-29 36 views
0

对于messages表结构如下获得不同用户的邮件数据库表

id, sender_id, receiver_id, text 

我想建立不同的用户列表(由信息ID订购)谁要么发出了一个信息或接收一个来自当前会议的持有者。该列表只能包含一次用户。

的查询如:

"SELECT * FROM messages WHERE sender_id = '$sess_id' OR receiver_id = '$sess_id'"; 

产生重复即,与同一用户的多个行。是否必须在SQL查询之后进行筛选,或者是否存在会产生期望的唯一列表的SQL查询?

谢谢!

回答

2

你可以这样做:

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

或者'SELECT DISTINCT SENDER_ID,receiver_id从具有SENDER_ID = '$ sess_id' OR receiver_id = '$ sess_id' 的消息; “ – Herbert

+0

”HAVING“应该是”WHERE“吗?......第二个似乎并没有完全满足我的要求。尽管第一个肯定会......谢谢! – algorithmicCoder

+0

@algorithmicCoder:它不会通过消息ID对结果集进行排序,但除了这个答案确实提供了一个非常干净的解决方案。 –

0
SELECT 
    CASE receiver_id WHEN '$sess_id' THEN sender_id ELSE receiver_id END AS user_id 
FROM messages 
WHERE receiver_id = '$sess_id' 
    OR sender_id = '$sess_id' 
GROUP BY CASE receiver_id WHEN '$sess_id' THEN sender_id ELSE receiver_id END 
ORDER BY MAX(message_id) 

MySQL允许您引用列别名在GROUP BY子句中,所以你也可以简单地这样做:

… 
GROUP BY user_id 
…