我在我的数据库中有一个带有文章名称和文章标签的表格。文章标签是一个字符串列,其中包含标签:“人,生活,总统”。每篇文章都以这种方式标记。
现在我想为整篇文章获得10个最受欢迎的标签。怎么做?
答案 0 :(得分:8)
如果您有可能,最好更改数据库架构,以获得文章表,标记表和article_tags表。
这样可以更有效地匹配标签(比如你想要做的那些),特别是如果你有很多文章。
使用您当前的设计,您将完全迭代(可能是大的)文章表,并维护一堆标签(通过临时表 - 在这种情况下,您可以通过存储过程执行 - 或者在应用代码中)。整体来说真的很无效。
答案 1 :(得分:1)
如果规范化数据库并创建单独的标记表,那将会容易得多。例如,如果您有这样的数据库:
article
article_id
article_title
article_content
article_tag
tag_name
article_id
UNIQUE INDEX (tag_name, article_id)
UNIQUE INDEX (article_id, tag_name) # in order to perform fast lookups in both directions
(通过创建包含tag
和tag_name
的{{1}}表,并将tag_id
替换为tag_name
,可以进一步规范化在tag_id
中。)
现在,您可以使用查询显示最常用标签的列表,例如:
article_tag