具有SELECT条件的MYSQL COUNT

时间:2017-10-29 09:09:31

标签: mysql

我新手请帮助我完成我的项目。我有两张桌子。

表用户:

Table User

表赞

Table Likes

我想计算每个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

我的输出: OUTPUT

但我想得到的输出是: 给定:user_id = 1

enter image description here

鉴于user_id = 4

enter image description here

对不起我的问题,我不知道如何构建。提前致谢

3 个答案:

答案 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,请在4when之后添加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

上声明给定用户的位置