MySQL:如何从一个表中选择值并通过不同表中的计算值进行排序?

问题描述:

基本上我有意见的表:MySQL:如何从一个表中选择值并通过不同表中的计算值进行排序?

id  target_item_id  comments 
-------------------------------------- 
1  435     blah blah 
2  643     blah blah 
3  643     blah blah 
4  643     blah blah

并为每个评论喜欢和不喜欢的投票不同,关系表:

id  comment_id   like 
---------------------------------- 
1  2     1 
2  2     1 
3  2     0 
4  3     1 
5  3     0 
6  4     1

comment_id上第二个表涉及到id第一表。基本上我需要一个查询,例如,从第一个表格中选择特定target_item的所有评论,但是请按照流行度评分排序评论。通过对第二张桌子上的特定评论计算所有喜欢(1s)和不喜欢(0s)并从第一张减去第二个结果来计算人气分数。在这个例子中,评论id 2的流行度得分为1:喜欢(1s)的次数是2,不喜欢的次数(0s)是1:2-1 = 1。 ,创建一个查询来选择评论并按照上述流行评分排序。或者我会单独查询每条评论以获得分数?

希望它足够清楚地理解。提前致谢。

select c.id, c.target_item_id, c.comments, 
     sum(case when v.`like`=1 then 1 when v.`like`=0 then -1 end) popularity 
from comments c 
left join votes v on v.comment_id = c.id 
where c.target_item_id = 643 
group by c.id, c.target_item_id, c.comments 
order by popularity desc 
+0

尝试过,但它获得了特定target_item的所有投票的SUM,而不是每个特定评论的SUM。有任何想法吗? – jacob 2011-03-28 20:56:02

+0

太棒了。这就像一个魅力。非常感谢! – jacob 2011-03-28 21:09:41

如果将不喜欢的值从0更改为-1,会更容易。然后你可以只Sum()类似的列。