SQL - 用户相关的分组依据

时间:2017-03-19 15:02:23

标签: mysql sql

我有两个表格模式:

  • 评论( comment_id ,文字)
  • 投票( comment_id,user_id ,价值)

Votes.value可以是-11

要获得各自评分的所有评论,我会进行简单的小组查询:

SELECT comments.*, SUM(votes.value) as score
FROM comments
LEFT JOIN votes on comments.comment_id = votes.comment_id
GROUP BY comments.comment_id

此请求可以由任何用户执行,我有user_id的变量。

如何选择列my_vote以获得用户投票的价值,或null如果用户未投票?

注意:

考虑一下stackoverflow,用户可以对每个答案进行投票/投票,每个用户都可以看到他是投票还是投票。

修改

我找到了解决方案 -

SUM(IF(user_id = $user_id, value, NULL)) as my_vote

2 个答案:

答案 0 :(得分:0)

我会使用以下内容:

SELECT c.*, SUM(v.value) as score, 
       GROUP_CONCAT(CASE WHEN v.user_id = $user_id THEN value END) as my_vote
FROM comments c LEFT JOIN
     votes v
     on c.comment_id = v.comment_id
GROUP BY c.comment_id;

这使用MySQL简写,将布尔表达式视为数字上下文中的数字。

答案 1 :(得分:0)

一个非常优雅的解决方案是: SUM(IF(user_id = $user_id, value, NULL)) as my_vote