2017-03-19 30 views
0

相关的组行,我有两个表模式: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

注:

想想计算器,其中每个答案是upvoted /用户downvoted,每个用户都可以看到,如果他upvoted或downvoted。

编辑:

我找到了解决办法 -

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

回答

0

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

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的简写是把布尔表达式为数字的数字上下文。

+0

虽然这种解决方案可以让我知道,如果用户投票与否,它并没有给我投票本身。我对使用比较用户的相同想法解决它的问题进行了编辑,但是给了我实际值 – Amit

+0

@Amit。 。 。查看编辑后的版本。 –