【问题标题】:Most used tags - mysql最常用的标签——mysql
【发布时间】:2011-03-30 23:27:06
【问题描述】:

我正在写博客。现在我想显示作者最常用的标签。标签存储在文章表中,在名为标签的列中,逗号分隔:

文章表(id | authorid | tags):

1 | 1 |足球、运动
2 | 1 |运动、网球、受伤
3 | 1 |运动、高尔夫、受伤

所以我想显示 id 为 1 的作者并显示他最常用的 3 个标签(来自上面显示的文章表)。在这种情况下,这将是:运动、受伤、足球。

这在 MySql 中可行吗?

【问题讨论】:

  • 您是否坚持使用非规范化的tags 列,或者您可以创建一个列出文章标签的实际表格?使用标签表,这将是微不足道的。
  • 你真的应该为你的标签添加一个表格和一个结合文章和标签的表格,这将使在 mysql 中变得容易,现在如果可能的话,它会非常困难。
  • 是的,我想。我现在被这个专栏困住了。那么这甚至可以做到吗?
  • “足球”如何比“网球”或“高尔夫”更常用?这三个都只出现一次。是什么打破了平局?
  • @Marc B:可能是本机的行顺序。

标签: php mysql


【解决方案1】:

是的,它可能,但更好的答案是引导您进入一个更“Normal”的数据库结构。

你真的需要一个像这样的数据库设置:

articles 表、tags 表、article_tags 表包含标签的 ID 和它分配给的文章。

然后您可以通过查看article_tags 并返回所有tag_idarticle_id = ('X') 来查询每篇文章('X')的标签。

【讨论】:

  • 谢谢!我会尝试构建它。更有意义。
  • 没问题 - 通常在查看这些类型的问题时,如果不容易实现,则说明您的数据模型有问题。
【解决方案2】:

你应该看看database normalization——维基百科的文章非常先进,但是它会给你一些术语,你可以搜索这些术语来找到更多关于这个主题的文章。

基本的想法是你会有另一个表:

table name: tags
columns: id | name

然后一张桌子加入他们:

table name: article_tags
columns: article_id | tag_id

然后您会将join 的所有数据放在一个查询中,以便显示每篇文章的标签名称。然后可以对表格进行更高级的查询,以找出文章最常用的标签和作者最常用的标签。

【讨论】:

  • 谢谢!会试试这个。感谢您的链接。
猜你喜欢
  • 2011-02-04
  • 2016-07-11
  • 2017-12-09
  • 2021-01-20
  • 2014-12-12
  • 2011-05-11
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
相关资源
最近更新 更多