我新手请帮助我完成我的项目。我有两张桌子。
表用户:
表赞
我想计算每个story_id的所有喜欢并检查给定用户是否喜欢该故事,否则它将返回null。
截至目前,这是我的查询和输出,给定用户id = 1。
SELECT COUNT(*) , sl.story_id, u.id as user
FROM stories_likes sl
LEFT JOIN users u ON sl.user_id = u.id AND sl.user_id = 1
GROUP BY sl.story_id
但我想得到的输出是: 给定:user_id = 1
鉴于user_id = 4
对不起我的问题,我不知道如何构建。提前致谢
答案 0 :(得分:0)
users
表保持与查询的连接,因此它可能具有null
个值。相反,您应该使用user_id
表中的stories_likes
列:
SELECT COUNT(*) , sl.story_id, sl.user_id as user
-- Here --------------------------^
FROM stories_likes sl
LEFT JOIN users u ON sl.user_id = u.id AND sl.user_id = 1
GROUP BY sl.story_id
答案 1 :(得分:0)
如果查询只显示一个特定user_id
的结果,请尝试以下查询:
select count(*),
story_id,
(case find_in_set(1, Group_concat(user_id separator ',')) >0 then 1
else NULL
end
)as user_id
from Stories_Likes
group by story_id;
在上面的查询中,您可以在when
之后手动设置user_id,或者您可以设置具有特定ID的变量并在查询中使用它。
例如,如果您要查看user_id=4
,请在4
和when
之后添加then
。
Click here for the Updated Demo
希望它有所帮助!
答案 2 :(得分:0)
得到了答案。对于那些有同样问题并且需要这个问题的人来说,这就是答案。
SELECT COUNT(*) , sl.story_id, t.user_id
FROM stories_likes sl
LEFT JOIN users u ON sl.user_id = u.id
LEFT JOIN (SELECT * FROM stories_likes WHERE user_id = 4) t ON
sl.story_id = t.story_id
GROUP BY sl.story_id
在临时表t