PHP:通过MYSQL查询的热门帖子

时间:2017-10-07 13:23:44

标签: mysql sql sorting

所以我想通过制作一个mysql查询来显示我博客页面上的5个最受欢迎的帖子(没有wordpress,所有的html和php)。受欢迎程度是该帖子的评论数量。这很容易如果我的博客条目表包含评论计数。但我正在寻找一个解决方案,而不是再次更改我的所有mysql表。所以,我有两张桌子:

博客
包含列:ID |内容|日期
示例行:1 |大家好,今天我去购物了01.01.01
评论
包含列:ID |内容|日期|帐户|参考
示例行:2 |很棒的入场券! | 02.01.01 |金| 1

基本上,每当有人对某个条目发表评论时,他的帐户名称和评论都会插入到评论表中。此外,还有一个自动增量ID和一个参考,其中包含它所属的 Blog 条目的ID(并且有一个日期)。 Blog 表只包含它应显示的内容(除了其自动递增ID,用于评论表中的参考列)。
那么,我应该运行什么Query来获取 Reference -Column中评论最多的Blog-Entrys?

编辑:我尝试过sum(),count()和max()的各种组合永远不会得到预期的结果。本来应该写这个。

2 个答案:

答案 0 :(得分:0)

以下查询将为您提供所有具有更高计数的评论的博客。我使用 limit 来限制提取的记录数

SELECT b.content, b.id AS blogid, COUNT(c.id) as commentsCount
FROM blog b
JOIN comments c ON c.reference = b.id
GROUP BY b.id
HAVING commentsCount > 0
ORDER BY commentsCount desc
LIMIT 5

我已将评论添加到每一行。请检查

SELECT b.content, b.id AS blogid, COUNT(c.id) as commentsCount //This line you can select whatever columns you need.
     FROM blog b
    JOIN comments c ON c.reference = b.id //Joing comments by reference column
    GROUP BY b.id //group the column
    HAVING commentsCount > 0 //The blog may have or may not have comments 
    ORDER BY commentsCount desc //Used to get the highest comment count first 
    LIMIT 5 //get only 5 records if you want 10 records then replace by 10. If you want all the records then remove this line

答案 1 :(得分:0)

尽管Channaveer Hakari的答案非常合适,但我发现了一个较短的查询:

SELECT * FROM `Blog` b JOIN (SELECT c.Reference, Count(*) AS cnt FROM `Comments` c GROUP BY c.Reference) d ON (d.Reference=b.ID) ORDER BY cnt DESC;