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更改为-1,会更容易。然后你可以只Sum()类似的列。
尝试过,但它获得了特定target_item的所有投票的SUM,而不是每个特定评论的SUM。有任何想法吗? – jacob 2011-03-28 20:56:02
太棒了。这就像一个魅力。非常感谢! – jacob 2011-03-28 21:09:41