Mysql 查询以统计跟随者的数量

Mysql 查询以统计跟随者的数量,mysql,Mysql,我有一个MySQL表,我将在其中存储用户的email\u id,以及用户的追随者的email\u ids。其栏目包括: ID, USER_EMAIL, FOLLWING_EMAIL 现在,当用户登录到他的帐户时,我想计算: 他跟踪的人数 他有多少追随者 计算他跟随的人数很简单: select count(*) from list where user_email = <logged-in email> 从用户电子邮件= 但是我如何计算一次查询中有多少人在跟踪他呢?我想您只需要更

我有一个MySQL表,我将在其中存储用户的
email\u id
,以及用户的追随者的
email\u id
s。其栏目包括:

ID, USER_EMAIL, FOLLWING_EMAIL
现在,当用户登录到他的帐户时,我想计算:

  • 他跟踪的人数
  • 他有多少追随者
  • 计算他跟随的人数很简单:

    select count(*) from list where user_email = <logged-in email>
    
    从用户电子邮件=
    

    但是我如何计算一次查询中有多少人在跟踪他呢?

    我想您只需要更改WHERE子句中的字段:

    SELECT count(*) FROM list WHERE following_email = '...'
    
    要在一个查询中同时计数,请使用子选择:

    SELECT
        (SELECT count(*) FROM list WHERE user_email = '...') AS following,
        (SELECT count(*) FROM list WHERE following_email = '...') AS followers
    

    是否有任何优化来存储数据,以实现此功能


    对。在
    USER\u EMAIL
    上添加一个索引,在
    FOLLOWING\u EMAIL
    上添加另一个索引,那么FOLLOWING\u EMAIL是否就是该用户正在跟踪的人的电子邮件地址?还是将索引放入另一个表中?如果是前者,则:

    SELECT COUNT(*) from list where FOLLOWING_EMAIL="test@test.com"
    
    选择
    计数(当用户\u email=''然后为1 ELSE NULL END时的情况)如下所示,
    作为跟随者计数(在电子邮件后面为“”时为大小写,然后为1个ELSE NULL END)
    从…起
    列表
    哪里
    中的“”(用户电子邮件,在电子邮件之后)
    
    如果您添加代码就好了。至少您的db模式给出了表结构。@DeveshAgrawal:您的Shift键似乎被卡住了。你能用普通的方式打字吗?这也适用于下面的注释。我可以在一个查询中同时计算这两个内容吗?
    SELECT
        COUNT(CASE WHEN user_email = '<email>' THEN 1 ELSE NULL END) AS following_cnt,
        COUNT(CASE WHEN following_email = '<email>' THEN 1 ELSE NULL END) AS follower_cnt
    FROM
        list
    WHERE 
        '<email>' IN (user_email, following_email)