MySQL:如何从一个表中选择值并按其他表中的计算值排序?

时间:2011-03-28 20:21:01

标签: mysql calculated-columns

基本上我有一张评论表:

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,不喜欢的数量(0)为1:2 - 1 = 1。

我是否可以通过MySQL创建一个查询来选择评论并按照上述方式按人气得分排序?或者,我是否可以单独查询每条评论以获得分数?

希望能够清楚地理解。提前谢谢。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

如果您将不喜欢值从0更改为-1会更容易。那么你可以只用Sum()那样的列。