【问题标题】:How to retrieve multiple tags from a database?如何从数据库中检索多个标签?
【发布时间】:2011-07-02 20:05:48
【问题描述】:

好的,我做了一些研究,发现一个好的规范化文章和标签表应该是这样的:

articles table:  article_id | article_text

tags table: tag_id | tag_text

article-tag table: article_id | tag_id

现在,我尝试这样做:假设我正在搜索 3 个标签,例如“asp.net”、“.net”、“c#”。检索具有这些标签的文章非常容易。但我不想要这个。我想要的是检索具有 exactly 这三个标签或 其中任何两个或一个但没有的文章包含 4 个或更多标签的文章。我不想要带有“asp.net”、“.net”、“c#”、“ruby”的搜索结果。我只想关注带标签的文章:

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

.net", "c#"

"asp.net", ".net"

"asp.net", "c#"

"c#"

"asp.net"

".net"

什么是正确的 MySQL 查询?

【问题讨论】:

  • 也许做一个辅助函数来计算匹配的标签(从可接受的标签列表中),然后根据计数为 2 或 3 进行选择。
  • 我也是这么想的,我得出的结论是我真的需要计算匹配的标签。这是第一步,但剩下的呢?感谢您顺便编辑帖子(我是新手:))。

标签: mysql database


【解决方案1】:

我认为self join 可能是一种方式。例如,如果您通过三个标签进行查询,则将 article-tag 表与其自身连接 3 次。不过,我不确定这将如何扩展。

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

【讨论】:

  • 那么,如果我要搜索 6 个标签,我会加入文章标签表 6 次。优化了吗?我的意思是这样做是正确的方法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-02
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-01
相关资源
最近更新 更多