从 mysql 个规范化表中获取最受欢迎的标签
Get most popular tags from mysql normalized tables
我正在为我正在创建的论坛构建自己的标签系统。一切正常,但我试图回显最流行标签的列表,但我找不到要使用的查询..
我的 table 看起来像这样:
我需要一个 20 个最流行标签的列表,所以 tag_names 其中 tag_id 在 article_tag_xref table 中出现最多。任何知道查询应该是什么样子的人?谢谢!
您可以使用以下查询:
SELECT t.tag_id, t.tag_name, COUNT(article_id) AS cnt
FROM Article_Tag_Xref AS a
INNER JOIN Tag AS t ON a.tag_id = t.tag_id
GROUP BY t.tag_id, t.tag_name
ORDER BY COUNT(article_id) DESC LIMIT 20
COUNT(article_id)
returns 每个 tag_ig
在 Article_Tag_Xref
table 中出现的次数。因此,按此计数降序排列并应用 LIMIT 20
returns 20 个最流行的 tag_ig
值。
以下应该适合您,因为您只询问了 tag_names 而没有计算。
SELECT tag_name
FROM Tag
WHERE tag_id IN ( SELECT tag_id, COUNT(article_id)
FROM Article_Tag_Xref
GROUP BY tag_id
ORDER BY COUNT(article_id) DESC
LIMIT 20)
子查询 returns 前 20 个 tag_ids
及其计数。
我正在为我正在创建的论坛构建自己的标签系统。一切正常,但我试图回显最流行标签的列表,但我找不到要使用的查询..
我的 table 看起来像这样:
我需要一个 20 个最流行标签的列表,所以 tag_names 其中 tag_id 在 article_tag_xref table 中出现最多。任何知道查询应该是什么样子的人?谢谢!
您可以使用以下查询:
SELECT t.tag_id, t.tag_name, COUNT(article_id) AS cnt
FROM Article_Tag_Xref AS a
INNER JOIN Tag AS t ON a.tag_id = t.tag_id
GROUP BY t.tag_id, t.tag_name
ORDER BY COUNT(article_id) DESC LIMIT 20
COUNT(article_id)
returns 每个 tag_ig
在 Article_Tag_Xref
table 中出现的次数。因此,按此计数降序排列并应用 LIMIT 20
returns 20 个最流行的 tag_ig
值。
以下应该适合您,因为您只询问了 tag_names 而没有计算。
SELECT tag_name
FROM Tag
WHERE tag_id IN ( SELECT tag_id, COUNT(article_id)
FROM Article_Tag_Xref
GROUP BY tag_id
ORDER BY COUNT(article_id) DESC
LIMIT 20)
子查询 returns 前 20 个 tag_ids
及其计数。