我有3张桌子:
submissions
,submissions_votes
和users
。我目前的查询:
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)?
答案 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