在我的网站上,我有三大部分:人们可以开始讨论的部分,他们可以分享故事的部分和我自己写的文章的博客.我使用下面的数据库结构构建了一个自定义标记系统.
在我的tags_xref表中,每个帖子类型需要有3个不同的列,因为讨论可以与故事或文章具有相同的ID.
一切都正常工作,但我遇到查询显示某些标签的问题.我已经知道如何在讨论部分显示最受欢迎的标签:
"SELECT t.id, t.tag, COUNT(discussion_id) AS cnt
FROM tags_xref AS xrf
INNER JOIN tags AS t ON xrf.tag_id = t.id
GROUP BY t.id, t.tag
ORDER BY COUNT(discussion_id) DESC LIMIT 20"
Run Code Online (Sandbox Code Playgroud)
现在我想在整个网站上展示最受欢迎的标签,所以从讨论,故事和文章中可以看出来.有没有人可以帮我这个?我已经工作了几个小时,似乎无法找到解决方案..谢谢!
您可以对查询进行简单的修改:
SELECT t.id, t.tag, COUNT(*) AS cnt
FROM tags_xref xrf INNER JOIN
tags t
ON xrf.tag_id = t.id
GROUP BY t.id, t.tag
ORDER BY COUNT(*) DESC
LIMIT 20;
Run Code Online (Sandbox Code Playgroud)
想必各种id都是NULL在不合适的时候。如果由于某种奇怪的原因,您实际上在给定外部参照的所有三个 id 中存储了值,您可以执行以下操作:
SELECT t.id, t.tag,
(COUNT(story_id) + COUNT(discussion_id) + COUNT(article_id) ) AS cnt
FROM tags_xref xrf INNER JOIN
tags t
ON xrf.tag_id = t.id
GROUP BY t.id, t.tag
ORDER BY cnt DESC
LIMIT 20;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
184 次 |
| 最近记录: |