输出一个mysql独特的查询只输出我想要的信息


outputting a mysql distinct query only outputting the information i want

我想创建一个聊天/pm系统,我有一些麻烦,我想做一个特定的查询

我有一个名为messages的表,其中包含以下字段

ID, From_user_id, To_user_id, Content

当转到收件箱时,我想唯一地显示与我通信的所有用户。例如,我的数据库中有以下内容

ID, From_user_id, To_user_id, Content
1,  1,            2,          hi
2,  1,            2,          hello
3,  2,            1,          hi
4,  1,            3,          hi
5,  3,            1,          hi

在user1的收件箱中,我想回显user_id 2和user_id 3在user2的收件箱中,我想回显user_id 1在user3的收件箱中,我想要回显user_id 1

我尝试了以下代码

$qinbox = "SELECT DISTINCT from_users_id, to_users_id from messages
WHERE from_users_id = $id OR to_users_id = $id";
$queryinbox = $db->query($qinbox);
while ($inbox = $queryinbox->fetch(PDO::FETCH_ASSOC)) {
            echo $inbox['from_users_id']; 
            echo $inbox['to_users_id']; echo ' <p>' ; }

但是user1得到以下行

ID, From_user_id, To_user_id 
1,  1,            2              
3,  2,            1          
4,  1,            3          
5,  3,            1          

,而我希望结果是唯一的。是谁不重要。所以from或to并不重要。

像facebook或linkedin聊天。因此,如果我是这个实例中的user1,我希望看到user2和user3,而且只有一次。

没有UNION,所以速度更快

SELECT DISTINCT IF(from_users_id = $id, to_users_id, from_users_id) as user_id
FROM messages
WHERE from_users_id = $id OR to_users_id = $id;

我想应该是这样的

SELECT DISTINCT a.user_id
FROM (SELECT from_users_id as user_id 
      FROM messages WHERE to_users_id = $id 
      UNION SELECT to_users_id 
      FROM messages WHERE from_users_id = $id) as a