我想创建一个聊天/下午系统,我想要一个特定的查询有点麻烦
我有一个名为messages的表,其中包含以下字段
ID,From_user_id,To_user_id,内容
进入收件箱时,我希望向所有与我对应的用户展示但却是唯一的。例如,我的数据库中有以下内容
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
虽然我希望结果是唯一的。它是谁并不重要。所以从无到有。
喜欢facebook或linkedin聊天。所以,如果我在这个实例中是user1,我想看到user2和user3只有一次。
答案 0 :(得分:1)
这样的事情我应该这样做
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
答案 1 :(得分:1)
没有 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;