我有两张桌子:
交:
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排序的。我如何以总票数订购?
答案 0 :(得分:0)
如果您想通过投票获得post
的前10个记录,请使用join
和group 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