我想创建一个聊天/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