根据另一个表中出现的次数从MySQL表中排序结果(如果有的话)

时间:2013-10-14 10:22:51

标签: php mysql join

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

使用PHP代码,我希望从MySQL表中按照 DESC 顺序中的其他表的出现次数(如果有的话)来订购结果。

让我具体解释一下自己。

我有两张桌子:

第一张表,名为“post”,包含以下非详尽内容:

  • ID
  • ...

第二个表,称为“post_votes”,其中包含以下非详尽内容:

  • ID
  • POST_ID
  • USER_ID
  • ...

实际上:如果用户投票支持现有帖子(“post”表中列出的帖子),则在“post_votes”表中创建一条记录,将post id作为post_id插入,将用户id作为user_id插入。 因此,如果多个用户投票支持,则可以存在从0到多次发布的帖子,这构成了帖子的投票数量。

现在,这就是我希望订购结果的方式。我需要通过他们的投票,即“post_votes”表中的出现次数来命令“post”表中列出的帖子。

有一件事要记住,有些帖子可能永远不会收到任何投票,例如在第二张表中会找到0次。

我很感激有关该主题的任何帮助!

2 个答案:

答案 0 :(得分:1)

使用joinCOUNT

可以使用单个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

此刻我不能测试此查询的有效性,但这是这样的。

答案 1 :(得分:0)

您可以使用左连接

 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