在连接多个表时查明用户是否存在总和

时间:2014-02-20 07:02:17

标签: mysql sql

我有3张桌子: submissionssubmissions_votesusers。我目前的查询:

SELECT s.*, u.username, u.avatar, SUM(sv.up) helpfulVotes 
FROM submissions s 
INNER JOIN users u 
  ON s.user_id = u.id 
LEFT JOIN submissions_votes sv 
  ON s.id = sv.submission_id 
WHERE s.id = 23 
GROUP BY s.id

将返回提交详细信息,提交的用户以及提交的有用投票数量(来自submissions_votes表)。

这很好用,但我想做的是测试SUM(sv.up)中的条件,看看该和中的任何用户是否与来自submissions的特定user_id匹配。

我正在考虑做这样的事情,但它不起作用:

SELECT s.*, u.username, u.avatar, SUM(sv.up) helpfulVotes,
SUM (IF(sv.user_id = 15, count, 1)) as currentUserVoted, <---- ???
FROM submissions s 
INNER JOIN users u 
  ON s.user_id = u.id 
LEFT JOIN submissions_votes sv 
  ON s.id = sv.submission_id
WHERE s.id = 23 
GROUP BY s.id

如何查看该总和中是否与当前用户的ID匹配(在本例中为15)?

1 个答案:

答案 0 :(得分:1)

是的,您可以在SUM()中使用条件,就像SUM (sv.user_id = 15)会为您提供用户15的计数

SELECT 
  s.*,
  u.username,
  u.avatar,
  SUM(sv.up) helpfulVotes,
  SUM(sv.user_id = 15) AS currentUserVoted 
FROM
  submissions s 
  INNER JOIN users u 
    ON s.user_id = u.id 
  LEFT JOIN submissions_votes sv 
    ON s.id = sv.submission_id 
WHERE s.id = 23 
GROUP BY s.id 

或者如果您想根据用户ID汇总其他列,可以使用CASE

SUM (CASE WHEN sv.user_id = 15 THEN sum_other_col ELSE 0 END) as currentUserVoted