从一个表中选择行,其中MYSQL中的值和顺序来自另一个表

时间:2016-02-10 00:33:55

标签: mysql sql

我有两张桌子:

交:

post_id  vote
2         2
1         5
3         1
1         3

并投票:

SELECT * FROM post
WHERE id IN
    (SELECT post_id FROM
        (SELECT SUM(vote) as totalvote, post_id
        FROM voting
        GROUP BY post_id) as table1
    ORDER BY totalvote DESC)
LIMIT 10"

我想通过“投票”表中的评分来显示前10个帖子:

{{1}}

但它是按帖子ID排序的。我如何以总票数订购?

2 个答案:

答案 0 :(得分:0)

如果您想通过投票获得post的前10个记录,请使用joingroup by

select p.*
from post p join
     voting v
     on p.id = v.post_id
group by p.id
order by count(*) desc
limit 10;

要获得实际投票,请在count(*)

中添加select.

答案 1 :(得分:0)

可能这就是你所需要的:

SELECT post.id, post.text FROM post
JOIN voting ON voting.post_id = post.id
GROUP BY post.id
ORDER BY AVG(vote) DESC
LIMIT 10

至少我认为按平均评级排序是有意义的。但是,当然你可以按照给出的总分数来订购:

SELECT post.id, post.text FROM post
JOIN voting ON voting.post_id = post.id
GROUP BY post.id
ORDER BY SUM(vote) DESC
LIMIT 10