我有三个表,posts
, tags
, & postTags
。正如您可能猜到的那样,posts
保存有关博客文章的信息,tags
保存有关系统上正在使用的标签的信息,并保存和postTags
之间的关系。posts
tags
现在,假设我知道tagID
我正在寻找的每个标签的 s 以及我不知道的标签,什么是合适的,什么是合适的查询来获取所有posts
符合tagID
我指定的所有 s标准的在一个列表上,而没有我在另一个列表上指定的内容?
我可以解决的一种方法是:
SELECT
`posts`.*,
CONCAT(',', GROUP_CONCAT(`postTags`.`tagID`), ',') AS `pTags`
FROM
`posts`
INNER JOIN
`postTags`
ON
`postTags`.`postID` = `posts`.`postID`
GROUP BY
`posts`.`postID`
HAVING
`pTags` LIKE '%,2,%'
AND
`pTags` LIKE '%,3,%'
AND
`pTags` NOT LIKE '%,5,%'
此查询将选择所有已标记为 tagID 2 和 3 且未标记为 tagID 5 的帖子。但这似乎很慢,尤其是当数据被大量标记过滤时。
编辑