如何检查mysql中是否存在一组外键?

时间:2015-02-18 14:29:20

标签: php mysql join

在mysql中,我有一个线程表和一个用于线程用户的表,每个threaduser都有自己的id和线程表的外键。现在给出一组用户ID,我想看看是否存在一个用户正是那些id的线程。没有更多或更少的人参与。我有这个代码似乎工作2给用户ID:

    $query = "SELECT th.id
              FROM (
                 SELECT th.id
                 FROM thread th
                 JOIN thread_user tu ON th.id=tu.thread_id AND (tu.user_id={$user_id} OR tu.user_id={$target_id})
                 GROUP BY th.id
                 HAVING count(tu.id)=2
              ) th
              JOIN thread_user tu ON th.id=tu.thread_id
              GROUP BY th.id
              HAVING count(tu.id)=2";

内部子查询获取用户包含给定id的所有线程。然后我将它与每个线程的所有用户一起加入,并将它们分组并再次按2过滤。结果应该是具有完全给定id的用户的线程,而不是更多或更少的人。

这似乎是多余的,有没有更好的方法呢?

由于

2 个答案:

答案 0 :(得分:0)

如果我正确理解您的表结构,您应该只需查询链接表thread_user即可。像这样

SELECT thread_id
FROM thread_user
WHERE id IN (111,222)
GROUP BY thread_id
HAVING COUNT(id) = 2;

答案 1 :(得分:-1)

Select th.id, count (th.id) 
from thread th 
  inner join thread_user tu on th.id = tu.thread_id 
where tu.user_id in ({$user_id}) 
   OR tu.user_id in ({$target_id}) 
group by (th.id) 
having count (th.id) >= 2

内部联接仅选择具有匹配id的两个表中的记录。用于搜索集合$ user_id可以是逗号分隔值