与多个id的一对多关系检查相关对象

时间:2014-06-14 18:23:52

标签: mysql sql

我想询问是否有选项可以在joining table时执行多项检查。问题是我有桌面'对话',其中有很多'收件人',我想以database的方式查询,所以我知道是否有一个会话,其中包含所有提供的收件人,例如我想检查是否有同时有user_id=3user_id=5的会话,但我不想要只拥有其中一个用户的会话。

2 个答案:

答案 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);

cidconversation_id

的缩写

demo