2011-07-02 33 views
1

好吧,我做了一些研究,发现了一个很好的归一化的文章和标签表应该是这样的:如何从数据库中检索多个标签?

articles table: article_id | article_text 

tags table: tag_id | tag_text 

article-tag table: article_id | tag_id 

现在,我尝试做的是这样的:假设我正在寻找3个标签例如,“asp.net”,“.net”,“c#”。检索包含这些标签的文章非常容易。但我不想要这个。我想要的是找回物品具有正是这三个标签或任何两个或其中的一个但与4个或更多标签,包括他们的文章。我不想要“asp.net”,“.net”,“c#”,“ruby”的搜索结果。我只想要以下标记的文章:

"asp.net", ".net", "c#" 

.net", "c#" 

"asp.net", ".net" 

"asp.net", "c#" 

"c#" 

"asp.net" 

".net" 

什么是正确的MySQL查询呢?

+0

也许会做一个辅助功能来计算匹配标签(从允许标签列表中),然后根据计数为2或3来选择。 –

+0

我也这么认为,并且我得出结论认为我确实需要对匹配标签进行计数。这是第一步,但其余的呢? 谢谢你的方式编辑帖子(我是一个新手:))。 – oguzkonya

回答

0

我在想,self join可能就是这样。例如,如果您使用三个标签查询,则可以将它自己的文章标签表加入3次。但我不确定这将如何扩展。

更新:使用此方法,您需要执行第二个查询以排除具有> 3个标签的匹配项。

+0

那么,如果我想搜索6个标签,我会加入文章标签表6次。它被优化了吗?我的意思是这是正确的做法吗? – oguzkonya