我有一个messages\u users表,其中包含参与对话的用户: conversationId | userId
因为目的是多个用户可以在一个会话中获得信息,所以一行等于一个用户。
有两种类型的对话:与朋友的对话和与多个用户的分组对话。区别他们的仅仅是里面的人数。
2个用户=与朋友对话
3或更多=分组对话
我想允许用户从他们的ID(这里是1和2)打开与朋友的对话。所以,我需要做一个sql语句,只在这两个用户所在的地方检索会话id。
如果我这样做,我将获得这两个用户的所有对话(例如,如果与他们有分组对话)
SELECT convId FROM messages_users WHERE userId IN (1,2)
我试过了,但没用:
SELECT convId FROM messages_users WHERE userId IN (1,2) HAVING COUNT(userId) = 2
我也试过这个,但它仍然能让我了解他们的每一次谈话:
SELECT convId FROM messages_users a INNER JOIN messages_users b ON a.convId = b.convId WHERE a.userId = 1 AND b.userId = 2
3条答案
按热度按时间jyztefdp1#
我们可以尝试使用带有
EXISTS
条款:下面是一个演示的链接,演示了上述逻辑的工作原理:
演示
0ve6wy6x2#
您需要的条件是:
你不能在
GROUP BY
因为如果在对话中,您将无法计算用户“3”。第三个条件阻止“3”参与。在mysql中,这可以简化为:
dsekswqp3#
对于每个“与朋友的对话”,必须只有两行具有相同的
convId
:如果您想要用户1和2的“与朋友的对话”:
请参见演示