Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:通过MYSQL查询发布流行帖子_Mysql_Sql_Sorting - Fatal编程技术网

PHP:通过MYSQL查询发布流行帖子

PHP:通过MYSQL查询发布流行帖子,mysql,sql,sorting,Mysql,Sql,Sorting,因此,我想通过一个mysql查询来显示我博客页面上最受欢迎的5篇文章(没有wordpress,全部是html和php)。受欢迎程度取决于该帖子的评论数量。如果我的博客条目表包含评论计数,这将很容易。但是我正在寻找一种解决方案,而不需要再次更改所有mysql表。所以,我有两张桌子: 表博客 包含列:ID |内容|日期 示例行:1 |大家好,今天我去购物了| 01.01.01 表评论 包含列:ID |内容|日期|帐户|参考 示例行:2 |很棒的条目!|02.01.01 |金| 1 基本上,每次有人对

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

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

基本上,每次有人对条目进行注释时,他的帐户名和注释都会插入到注释表中。此外,还有一个自动递增ID和一个引用,其中包含它所属博客条目的ID(还有一个日期)。Blog表只包含它应该显示的内容(除了它的自动递增ID,该ID用于Comments表中的Reference列)。
那么,我应该运行什么查询来获取引用列中评论最多的博客条目呢


编辑:我尝试了sum()、count()和max()的各种组合,但从未得到预期的结果。应该早一点写这篇文章。

下面的查询将获得所有评论数较高的博客。我使用了限制来限制获取的记录数

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

尽管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;

很高兴看到你自己尝试了什么来解决这个问题,这会告诉我们你在发布问题之前做了研究。当你尝试时,你也会学习。如果有人只是给你一个答案/解决方案,那一切都是徒劳的,我这样说是为了你的未来。然后,您可以编辑您的帖子,以包含可能失败的内容;即使这样,也表明了你的努力。记住,我们总是很乐意帮忙。你能给我解释一下那个查询在做什么吗?好的,我会的。将向answer@SearchingSolutions我的答案对你有用吗。如果有任何其他疑问,请告诉我