基本上我有一张评论表:
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创建一个查询来选择评论并按照上述方式按人气得分排序?或者,我是否可以单独查询每条评论以获得分数?
希望能够清楚地理解。提前谢谢。
答案 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()那样的列。