我想查找是否存在一个用户与其他用户之间的对话,并从那里选择仅其他参与者的名称(在这种情况下,已经/未经过身份验证的用户,已经聊过)经过身份验证的用户)。
因此,假设用户1
已与用户5
和6
聊天,如何找到用户1
与之进行过对话的用户,无论他是开始还是其他人都这样做了? messaging
表看起来像这样
Columns: | id | fromId | toId | msg |
0 1 5 'hi'
1 5 1 '..'
3 1 6 '!'
4 6 1 '?'
5 1 5 '#'
我只需要每个用户的名字一次,因此对此的查询应该导致(对于用户1
):
5, 6
到目前为止,我有这个:
SELECT * FROM `messaging`
INNER JOIN (SELECT * FROM messaging
WHERE `toId` = 1
ORDER BY id DESC) a
on (messaging.id=a.id)
GROUP BY messaging.fromUser;
但是,当然,如果其他用户向经过身份验证的用户发送了消息,则此操作仅返回结果,反之亦然。如何将其他方案添加到此查询中?这样它还可以找到fromId = 1
和提取toId
的对话?
我意识到我可能无法解释这一点,但我希望它很清楚。我的母语不是英语,我吸了一个mySQL。
谢谢。
答案 0 :(得分:0)
这应该解决你想要做的事情:
SELECT fromId AS userId FROM messaging
WHERE toId = 1
UNION
Select toId AS userId FROM messaging
WHERE fromId = 1;