【发布时间】:2015-04-11 01:41:23
【问题描述】:
我想查找是否存在一个用户和其他用户之间的对话,并从那里仅选择其他参与者的姓名(在这种情况下,是/未经过身份验证的用户,已聊天使用经过身份验证的用户)。
那么,假设用户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 很烂。
谢谢。
【问题讨论】:
-
写一个查询找到他开始的对话,另一个查询找到他收到的对话,并将它们与
UNION结合起来。