MYSQL查询 - 检查结果为true / false并计算

时间:2016-10-27 11:11:45

标签: mysql

我正在尝试检查当前用户是否已经关注所选用户,我这样做是这样的:

(我知道这不是最好的方式,但因为我是MYSQL的新手,这和我能够提出的一样多)

SELECT EXISTS (SELECT 1 FROM Activity WHERE IdOtherUser = 86 AND id = 145)

我是' 145'我选择的用户是' 86'

现在返回' 0'如果我不跟随并且' 1'如果我跟踪那个人。

似乎已经开始工作,但它肯定需要改进!

现在我想做的是在同一个查询中统计关注者。

所以请指望我关注的人和跟随我的人。

'活动'是我存储关注者的表格,我将它们保存为:

' ID' =我

' idOtherUser' =我跟着的其他用户

'类型' =行动类型"关注"

在计算类似数量之前,我已经完成了计算,但我无法理解这一点!

如果有人可以花些时间来帮助我,我们非常感激!

如果问题不是最好的,我很抱歉,但我仍在学习并尽力使其尽可能清晰地理解。

提前致谢!!

2 个答案:

答案 0 :(得分:0)

如果您尝试从表Activity中的特定ID计算关注者,您可以这样做:

SELECT COUNT(idOtherUser) AS "I Follow",
       (SELECT COUNT(idOtherUser) FROM Activity WHERE idOtherUser = 145 AND type = "follow"
) AS "FOLLOW ME",
       (SELECT COALESCE(id,0) FROM Activity WHERE IdOtherUser = 86 AND id = 145 AND type = "follow")
FROM Activity WHERE id = 145 AND type = "follow"

答案 1 :(得分:0)

您可以使用"相关子查询"为了简化查询,您might也希望计数不同(取决于您的数据)。我也避免在列别名中使用空格。

SELECT
      COUNT(DISTINCT A1.idOtherUser) as i_follow
    , (
            SELECT
                  COUNT(DISTINCT A2.id)
            FROM Activity A2
            WHERE A2.idOtherUser = A1.id
                  AND A2.type = 'follow'
      )  as following_me
FROM Activity A1
WHERE A1.id = 145
      AND A1.idOtherUser = 86
      AND A1.type = 'follow'

尝试使用distinct而不使用,如果结果相同,则在查询之外留下明显的区别。