-4

我有一个 MySQL 表,我将在其中存储email_id用户的信息以及用户的关注者信息email_id。它的列是:

ID, USER_EMAIL, FOLLWING_EMAIL

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

  1. 他关注的人数
  2. 他的追随者数量

计算他关注的人数很简单:

select count(*) from list where user_email = <logged-in email>

但是我如何计算一个查询中有多少人在关​​注他?

4

3 回答 3

2

我认为您只需要更改 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

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

是的。添加一个索引 onUSER_EMAIL和另一个 on FOLLOWING_EMAIL

于 2012-06-23T20:01:00.620 回答
2
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)
于 2012-06-23T20:31:52.673 回答
0

那么 FOLLOWING_EMAIL 是该用户关注的人的电子邮件地址吗?还是另一个表的索引?如果是前者,那么:

SELECT COUNT(*) from list where FOLLOWING_EMAIL="test@test.com"
于 2012-06-23T20:01:38.157 回答