2012-06-23 117 views
-4

我有一个MySQL表格,其中我将存储用户的email_id以及用户的关注者email_id。它的栏目有:查询到关注关注者数量

ID, USER_EMAIL, FOLLWING_EMAIL 

现在,当用户在自己的帐户登录,我想计算:

  1. 的人数,他是继
  2. 追随者的数量

计算的人他后面的数字是简单的:

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

但是,我怎样才能计算出只有一个查询中有多少人跟着他?

+0

如果您添加的代码它会是不错。至少你的数据库架构 –

+0

我已经给了表结构。 –

+2

@DeveshAgrawal:您的Shift键似乎卡住了。你能打一个正常的情况吗?这也适用于下面的评论。 – Ryan

回答

1
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) 
+0

+1,不需要子选择的好方法 – andrewtweber

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 

有什么优化来存储数据,实现这个功能?

是的。在USER_EMAIL上添加索引,并在FOLLOWING_EMAIL上添加索引。

+0

我可以在一次查询中计算两件事吗? –

0

那么FOLLOWING_EMAIL是这个用户所关注的人的电子邮件地址?或者索引到另一个表中?如果是前者,那么:

SELECT COUNT(*) from list where FOLLOWING_EMAIL="[email protected]"