【发布时间】:2015-02-18 14:29:20
【问题描述】:
在mysql中,我有一个threads表和一个threadusers表,每个threaduser都有自己的id和thread表的外键。现在给定一组用户 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 完全相同的用户的线程,没有更多或更少的人。
这似乎是多余的,有没有更好的方法?
谢谢
【问题讨论】: