Mysql在多行中选择相同的信息

时间:2014-06-20 05:10:47

标签: mysql sql

我正在为应用程序用户之间的消息系统工作数据库。现在,消息传递系统的所有相关信息都基于2个表。第一个表包含有关两个用户之间对话的所有信息(包括会话ID),第二个表基本上只是有权访问对话的所有用户的列表,第三个表是所有消息的表。以下是每个表格相关部分的可视化

表1:

|  convoId  |
-------------
|     1     |
|     2     |
|     3     |
|     4     |
|     5     |

表2:

|  convoId  |  userId  |
------------------------
|     1     |    4     |
|     1     |    5     |
|     2     |    4     |
|     2     |    5     |
|     2     |    6     |
|     3     |    3     |
|     3     |    4     |

基本上,对话1在用户4和5之间,对话2在用户4,5和6之间。

我要做的是,当用户去发送消息时,查看该用户与他们尝试发送消息的那个(或多个)之间是否已经存在对话。因此,如果用户4试图向用户5发送消息,我希望得到convoId 1,但如果4试图向用户7发送消息,则会创建一个新对话(我已经处理了该部分)。

我可以想办法使用多个查询并循环遍历它们,但看起来有点沉重。我想知道是否有办法在一个查询中完成它(可能只是少数几个)。

由于

1 个答案:

答案 0 :(得分:2)

尝试:

SELECT a.convoId 
FROM Table2 a JOIN Table2 b
ON a.convoId = b.convoId
WHERE a.userId = 4
AND b.userId = 5
AND a.convoId IN (SELECT convoId FROM Table2
                   GROUP BY convoId
                   HAVING COUNT(DISTINCT userId) = 2);

这将在用户4和5之间返回convoId。如果没有数据,这些用户还没有任何对话。