如何从规范化表格中获得最受欢迎的标签?

在我的网站上,我有三大部分:人们可以开始讨论的部分,他们可以分享故事的部分,以及我自己写文章的博客。 我使用下面的数据库结构构建了一个自定义标记系统。

在我的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"

现在我想在整个网站上展示最受欢迎的标签,所以从讨论,故事和文章。 有没有人可以帮助我呢? 我一直在这个工作几个小时,似乎无法找到解决方案..谢谢!


你可以对你的查询做一个简单的修改:

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;

据推测,各种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;
链接地址: http://www.djcxy.com/p/90407.html

上一篇: How to get the overall most popular tags from normalized tables?

下一篇: Can you use absolute paths in Electron?