如何查找两个用户之间的对话是否存在(在 mySQL 查询中)
How to find if a conversation between two users exists (in mySQL query)
我想查找是否存在一个用户与其他用户之间的对话,并且从那里 select 只有其他参与者的姓名(在本例中,is/are 未通过身份验证,已与经过身份验证的用户聊天)。
所以,假设用户 1
已经与用户 5
和 6
聊天,我如何找到用户 1
有有过对话,不管是他发起的还是其他人发起的? messaging
table 看起来像这样
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;
但是,当然,这只是 returns 如果其他用户向经过身份验证的用户发送消息的结果,反之亦然。如何将其他场景添加到此查询?这样它也可以找到 fromId = 1
的对话并获取 toId
?
我意识到我可能无法很好地解释这一点,但我希望它是清楚的。我的母语不是英语,我很烂 mySQL.
谢谢。
这应该可以解决您的问题:
SELECT fromId AS userId FROM messaging
WHERE toId = 1
UNION
Select toId AS userId FROM messaging
WHERE fromId = 1;
我想查找是否存在一个用户与其他用户之间的对话,并且从那里 select 只有其他参与者的姓名(在本例中,is/are 未通过身份验证,已与经过身份验证的用户聊天)。
所以,假设用户 1
已经与用户 5
和 6
聊天,我如何找到用户 1
有有过对话,不管是他发起的还是其他人发起的? messaging
table 看起来像这样
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;
但是,当然,这只是 returns 如果其他用户向经过身份验证的用户发送消息的结果,反之亦然。如何将其他场景添加到此查询?这样它也可以找到 fromId = 1
的对话并获取 toId
?
我意识到我可能无法很好地解释这一点,但我希望它是清楚的。我的母语不是英语,我很烂 mySQL.
谢谢。
这应该可以解决您的问题:
SELECT fromId AS userId FROM messaging
WHERE toId = 1
UNION
Select toId AS userId FROM messaging
WHERE fromId = 1;