我有2张桌子; 'posts'和'post_authors'。在post_authors中,多个帐户可以在一个帖子上进行协作。我在考虑一种搜索帖子的方式时遇到了麻烦,该帖子由用户输入指定多个帐户协作。
例如,我想查找Jane Doe和John Doe合作的所有帖子,即使这些帖子中还有其他合作者。
我当前的查询...
SELECT posts.ID
FROM posts
INNER JOIN post_authors author
ON ( posts.ID = author.post_id AND author.user_id IN ( '144', '6' ) )
WHERE posts.status = 'publish'
此查询检索两个帐户中的任何一个都附有的所有帖子。
答案 0 :(得分:1)
一种方法使用聚合:
SELECT p.ID
FROM posts p
INNER JOIN post_authors pa
ON p.ID = pa.post_id
WHERE pa.user_id IN ( '144', '6' ) AND
p.status = 'publish'
GROUP BY p.ID
HAVING MIN(pa.user_id) <> MAX(pa.user_id);
此查询的工作方式是,针对每个帖子ID
,仅限制用户144
和6
的记录。然后,它通过HAVING
子句断言,每个匹配的帖子ID
组都有这两个用户。
请注意,我将表别名更改为比实际表名短的名称。
答案 1 :(得分:1)
您可以使用group by
和having
:
SELECT p.ID
FROM posts p INNER JOIN
post_authors pa
ON p.ID = pa.post_id
WHERE pa.user_id IN ( '144', '6' ) and p.status = 'publish'
GROUP BY p.ID
HAVING COUNT(DISTINCT pa.user_id) = 2; -- number of items in list
post_id
可能是数字。如果是这样,请除去单引号。混合数据类型会使优化器感到困惑。
请注意,我使用的表别名是表名称的缩写。较短的表别名更易于编写和阅读。