Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL-分组依据上与用户相关的行_Mysql_Sql - Fatal编程技术网

Mysql SQL-分组依据上与用户相关的行

Mysql SQL-分组依据上与用户相关的行,mysql,sql,Mysql,Sql,我有两个表模式: 注释(注释id,文本) 投票(评论id,用户id,值) 投票。值可以是-1或1 为了获得所有评论及其各自的分数,我进行了一个简单的分组查询: SELECT comments.*, SUM(votes.value) as score FROM comments LEFT JOIN votes on comments.comment_id = votes.comment_id GROUP BY comments.comment_id 这个请求可以由任何用户执行,我为他的use

我有两个表模式:

  • 注释(注释id,文本)
  • 投票(评论id,用户id,值)
投票。值可以是
-1
1

为了获得所有评论及其各自的分数,我进行了一个简单的分组查询:

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\u id
设置了一个变量

如何选择列
my_vote
以获得用户的投票值,或者如果用户没有投票,如何选择列
null

注意:

想想stackoverflow,其中每个答案都是由用户向上/向下投票的,每个用户都可以看到自己是向上投票还是向下投票

编辑:

我找到了一个解决办法-

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

我将使用以下方法:

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速记,将布尔表达式视为数字上下文中的数字。

一个非常优雅的解决方案是:
SUM(IF(user_id=$user_id,value,NULL))作为我的投票

虽然此解决方案让我知道用户是否投票,但它本身并不给我投票权。我有一个编辑的问题,解决它使用相同的想法比较用户,但给我的实际价值