使用任何一组标签查找文章是一个相对简单的连接,并且已经讨论过:最佳数据库(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
);
Run Code Online (Sandbox Code Playgroud)
我想出了这个,我觉得它可能会起作用,但它很庞大,丑陋,有点不清楚,所以我认为必须有一个更好的方法:
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>)
Run Code Online (Sandbox Code Playgroud)
(基本上,如果相关标签的数量是预期值,则进行计数.)
select article_id
from applied_tags
where tag_id in (<input tag set here>)
group by article_id
having count(*) = <count of input tags>
Run Code Online (Sandbox Code Playgroud)
这应该做到这一点.我不会发誓这是最有效的方式,但它会做你想要的,假设tag_id + article_id是applied_tags的主键.如果不是(即,你可以有重复的标签),所有的赌注都会被取消.
归档时间: |
|
查看次数: |
764 次 |
最近记录: |