DB-设计:
我想确定某些用户所属的chat_id
。 user_id
已知。例如,用户25和用户28属于chat_id 1
。这些也属于与chat_id 2
的群聊。但是,应确定chat_id
只有这两个用户才有。我可以使用什么SQL查询?我尝试了如下:
[SELECT chat_id FROM `chat_partners` WHERE private=1 AND (F_user_id=100 OR F_user_id=50) GROUP BY chat_id HAVING count(*)=2;][1]
然而,当我指定了两个不存在的chat_id 1
时,我也获得了user_id
。
答案 0 :(得分:0)
您的尝试看起来并不遥远,但每个用户的检查需要在HAVING
子句中进行,而不是WHERE
子句:
SELECT chat_id
FROM chat_partners
WHERE private = 1
GROUP BY chat_id
HAVING SUM(CASE WHEN F_user_id = 25 THEN 1 ELSE 0 END) > 0 AND
SUM(CASE WHEN F_user_id = 28 THEN 1 ELSE 0 END) > 0
这将返回具有用户25和28的每个chat_id
。但是,也可以存在其他用户。如果您只想要完全包含这两个用户的聊天(例如私人聊天),那么您可以在HAVING
子句中添加一个额外的术语:
HAVING SUM(CASE WHEN F_user_id <> 25 AND F_user_id <> 28 THEN 1 ELSE 0 END) = 0
答案 1 :(得分:0)
如果您想要拥有这两个用户和其他用户的群组,那么一个简单的方法是:
SELECT chat_id
FROM chat_partners
WHERE private = 1 AND
F_user_id IN (25, 28)
GROUP BY chat_id
HAVING COUNT(*) = 2; -- If there can be duplicates, then use `COUNT(DISTINCT F_user_id)`;
如果您想与完全那些用户而不是其他用户进行聊天:
SELECT chat_id
FROM chat_partners
WHERE private = 1
GROUP BY chat_id
HAVING SUM(F_user_id = 25) > 0 AND SUM(F_user_id = 28) > 0;