【发布时间】:2009-09-09 23:49:26
【问题描述】:
查找带有任意一组标签的文章是一个相对简单的连接,并且已经讨论过:Best DB (MySQL) structure: Articles which contain favored tags
但是,如果我正在搜索,并且想要查找带有所有标签集的文章怎么办?
为具体起见,假设以下表格:
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>)
(本质上,如果相关标签的数量是预期值,则计数。)
【问题讨论】:
标签: sql