-4

MySQLテーブルがありemail_id、ユーザーのフォロワーと一緒にユーザーのを保存しますemail_id。その列は次のとおりです。

ID, USER_EMAIL, FOLLWING_EMAIL

ここで、ユーザーが自分のアカウントにログインしているときに、次のように計算します。

  1. 彼がフォローしている人の数
  2. 彼が持っているフォロワーの数

彼がフォローしている人の数を計算するのは簡単です:

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

しかし、1回のクエリで彼をフォローしている人の数を計算するにはどうすればよいですか?

4

3 に答える 3

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 に答える
2

WHERE句のフィールドを変更する必要があると思います。

SELECT count(*) FROM list WHERE following_email = '...'

1つのクエリで両方をカウントするには、副選択を使用します。

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

この機能を実現するために、データを保存するための最適化はありますか?

はい。にインデックスを追加し、USER_EMAILに別のインデックスを追加しますFOLLOWING_EMAIL

于 2012-06-23T20:01:00.620 に答える
0

では、FOLLOWING_EMAILは、このユーザーがフォローしている人のメールアドレスですか?または別のテーブルへのインデックス?前者の場合、次のようになります。

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