按另一个表中的出现次数(如果有)对 MySQL 表中的结果进行排序


Order results from a MySQL table by the number of occurrences from another table, if there are any

我知道这个问题可能已经被问过了,但我认为这比我通过搜索功能找到的要复杂一些。

使用 PHP 代码,我希望按 DESC 顺序按另一个表中的出现次数(如果有的话)对 MySQL 表中的结果进行排序。

让我具体解释一下自己。

我有两个表:

第一个表,称为"帖子",具有以下非详尽内容:

  • 编号

第二个表,称为"post_votes",内容不尽:

  • 编号
  • post_id
  • user_id

实际上:如果用户投票支持现有帖子("帖子"表中列出的帖子),则会在"post_votes"表中记录,插入帖子 ID 作为post_id,用户 ID 作为user_id。因此,如果有多个用户投票支持该帖子,则该帖子可以存在从 0 到多次出现,这构成了帖子的投票量。

现在,这就是我希望对结果进行排序的方式。我需要按投票顺序对"帖子"表中列出的帖子进行排序,即按它们在"post_votes"表中的出现次数排序。

但要记住的一件事是,有些帖子可能永远不会收到任何投票,例如,在第二个表格中会发现 0 出现。

我将不胜感激有关该主题的任何帮助!

它可能使用join and COUNT的单个SQL查询:

SELECT post.id, COUNT(post_votes.post_id) AS upvotes
FROM post, post_votes
WHERE post.id = post_votes.post_id
GROUP BY post.id
ORDER BY upvotes DESC

不是我目前无法测试此查询的有效性,但它是这样的。

您可以使用左联接

 select *,count(post_id) voteCount  from post left join post_votes on
    post.id=post_votes.post_id group by post_id order by voteCount desc