查找带有一组标签中任何一个的文章是一个相对简单的联接,并且已经讨论过:最佳数据库(MySQL)结构:包含优先标签的文章
但是,如果我正在搜索,并且想要查找带有所有标签集的文章该怎么办?
为具体起见,假定下表:
CREATE TABLE `articles` ( `id` INT NOT NULL ); CREATE TABLE `applied_tags` ( `tag_id` INT NOT NULL, `article_id` INT NOT NULL ); CREATE TABLE `search_tags` ( `search_id` INT NOT NULL, `tag_id` TAG NOT NULL );
我想出了这个方法,我认为这可能会起作用,但是它非常庞大,丑陋且不清楚,因此我认为必须有更好的方法:
Select articles.id from articles where ( select count(*) from applied_tags where applied_tags.article_id == articles.id and applied_tags.tag_id in (select search_tags.tag_id from search_tags where search_tags.search_id == <input>) == (select count(*) from search_tags where search_tags.search_id == <input>)
(本质上,请计算相关标签的数量是否为期望值。)
select article_id from applied_tags where tag_id in () group by article_id having count(*) =
这应该做。我不会发誓这是最有效的方法,但是假设tag_id + article_id是Applied_tags的主键,它会做您想要的。如果不是(即,您可以有重复的标签),则所有投注均关闭。