获得最常用的标签

时间:2014-05-18 09:11:37

标签: php mysql sql

大家好我想尝试从数据库中获取最常用的标签,如下所示:

+------------------------+
| post |       tags      |
+------------------------+
|  1   | ["php", "sql"]  |
|  2   | ["php", "html"] |
|  3   | ["css", "html"] |
|  4   |["php", "html5"] |
|  5   | ["php", "css"]  |
+------------------------+

我想获得此表中最常用的n个标签 我希望你们能帮我设置一个SQL查询,我发现自己无法启动,谢谢!

1 个答案:

答案 0 :(得分:1)

您应该考虑将数据库重新设计为以下内容:

Table: Posts
+=======================================================+
id    |    title    |    body    | user_id    |    etc..
+-------------------------------------------------------+

Table: Tags
+=====================+
id    |    name   
+---------------------+

Table: Post_tags
+======================+
post_id    |    tag_id
+----------------------+

假设您插入带有标签[php]和[html]的新帖子。然后,您将帖子添加到Posts表,并根据Post_tags表中存储的值向Tags表添加两行:

Table: Posts
+========================================================+
id    |    title    |    body    | user_id    |    etc..
+-------------------------------------------------------+
1     |  New Post!  | Post body! |   2564     |    ...

Table: Tags
+======================+
id    |    name   
+----------------------+
  1   |    html
  2   |     php

Table: Post_tags
+======================+
post_id    |    tag_id
+----------------------+
 1         |   1
 1         |   2

现在,要获得最受欢迎的标签,您只需执行以下操作:

SELECT 
    tag_id,
    COUNT(tag_id)
FROM Post_tags
GROUP BY tag_id

将为您提供每个标记的列表以及在帖子中使用它的次数。

抱歉,我知道这并不能完全回答你的问题。如果你确实需要存储JSON样式的标记字符串,你也可以在Posts中执行此操作,但是使用它来获取标记统计信息可能会增加所需的复杂性,并将数据分成关系表是一种更有效的处理方式。希望这有帮助!