我有一个 MySQL 表,我将在其中存储email_id
用户的信息以及用户的关注者信息email_id
。它的列是:
ID, USER_EMAIL, FOLLWING_EMAIL
现在,当用户登录到他的帐户时,我想计算:
- 他关注的人数
- 他的追随者数量
计算他关注的人数很简单:
select count(*) from list where user_email = <logged-in email>
但是我如何计算一个查询中有多少人在关注他?
我有一个 MySQL 表,我将在其中存储email_id
用户的信息以及用户的关注者信息email_id
。它的列是:
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
是否有任何优化来存储数据以实现此功能?
是的。添加一个索引 onUSER_EMAIL
和另一个 on FOLLOWING_EMAIL
。
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)
那么 FOLLOWING_EMAIL 是该用户关注的人的电子邮件地址吗?还是另一个表的索引?如果是前者,那么:
SELECT COUNT(*) from list where FOLLOWING_EMAIL="test@test.com"