我想询问是否有选项可以在joining table
时执行多项检查。问题是我有桌面'对话',其中有很多'收件人',我想以database
的方式查询,所以我知道是否有一个会话,其中包含所有提供的收件人,例如我想检查是否有同时有user_id=3
和user_id=5
的会话,但我不想要只拥有其中一个用户的会话。
答案 0 :(得分:0)
我认为你能做到这一点的唯一方法就是使用子查询。注意我还没有验证此查询。此外,这假设您每个唯一收件人只有一个关系。如果收件人可以收到多个会话副本,那么您需要计算子查询中的不同ID。
SELECT *
FROM conversations
WHERE 1 < (SELECT COUNT(*) FROM recipients
WHERE recipients.conversation_id = conversations.id
AND recipients.user_id IN (3, 5))
答案 1 :(得分:0)
这是进行此类搜索的另一种方法。使用GROUP CONCAT
将同一会话的用户组合在一起,然后使用FIND_IN_SET
仅获取3和5所在的会话。
select cid, group_concat(user_id) user_ids
from conversations a
group by a.cid
having find_in_set(3, user_ids) and find_in_set(5, user_ids);
cid
是conversation_id