大家好我想尝试从数据库中获取最常用的标签,如下所示:
+------------------------+
| post | tags |
+------------------------+
| 1 | ["php", "sql"] |
| 2 | ["php", "html"] |
| 3 | ["css", "html"] |
| 4 |["php", "html5"] |
| 5 | ["php", "css"] |
+------------------------+
我想获得此表中最常用的n个标签 我希望你们能帮我设置一个SQL查询,我发现自己无法启动,谢谢!
答案 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
中执行此操作,但是使用它来获取标记统计信息可能会增加所需的复杂性,并将数据分成关系表是一种更有效的处理方式。希望这有帮助!