根据另一个结果的总数对 MySQL 结果进行排序


Sort a MySQL result based on total count of another result

我有表tbl_poststbl_comments,主键分别post_idcomment_id。我尝试了以下代码:

$allPosts=mysql_query("
    select c.comment_id, post_id, count(*)
    from post u,
    comments c
    where u.comment_id = c.comment_id
    group by comment_id, post_id
    LIMIT 10
");

但我不知道它的作用。如何合并两个表格,以便总评论数确定列出的帖子的顺序tbl_posts

试试这个,如果你按行分开并使用联接,它会更易读

select c.comment_id, post_id, count(*) 
from post u join comments c 
on u.comment_id = c.comment_id 
group by comment_id, post_id LIMIT 10

看起来您有名为 tbl_commenttbl_post 的表,但您的查询将它们列为评论和帖子

select c.comment_id, post_id, count(*) 
from tbl_post u, tbl_comments c 
where u.comment_id = c.comment_id 
group by comment_id, post_id LIMIT 10

$allPosts=mysql_query("select c.comment_id, post_id, count(*) from tbl_post u, tbl_comments c where u.comment_id = c.comment_id group by comment_id, post_id LIMIT 10");

这只是修复了查询,使其运行,并且没有解决您可能遇到的任何问题,即两个(我猜测的)上的分组都是主键。

**编辑**要修复排序,请尝试:

SELECT tbl_post.comment_id, count(*)  
FROM tbl_post, tbl_comments
WHERE tbl_post.comment_id = tbl_comment.comment_id  
GROUP BY comment_id LIMIT 10
ORDER BY count(*) 

SQL 的解释:

您将使用内部联接从表注释中选择列comment_id,从表帖子中选择列post_id,按comment_id post_id分组,结果限制为 10 个。

我会尝试:

$allPosts = mysql_query("SELECT * FROM 
(SELECT c.comment_id, u.post_id, COUNT(*) AS 'count' FROM post u 
LEFT JOIN comments c ON c.comment_id = u.comment_id 
GROUP BY c.comment_id, u.post_id)
ORDER BY count DESC LIMIT 10");