2012-06-23 6 views
-4

У меня есть таблица MySQL, в которой я буду хранить email_id пользователя вместе с подпиской пользователя 'email_id s. Ее столбцы:Запрос на количество подписчиков

ID, USER_EMAIL, FOLLWING_EMAIL 

Теперь, когда пользователь вошел в систему на свой счет, я хочу, чтобы вычислить:

  1. Число людей, он следит за
  2. Число последователей он имеет

Расчет количества людей, он следующим прост:

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

Но как я могу рассчитать, сколько людей следит за ним в одном запросе?

+0

было бы неплохо, если бы вы добавить свой код. по крайней мере, ваша схема db –

+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

Я думаю, вам просто нужно изменить поле в ИНЕКЕ:

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

So is FOLLOWING_EMAIL электронный адрес этого пользователя, следующих за этим пользователем? Или индекс в другую таблицу? Если первое, то:

SELECT COUNT(*) from list where FOLLOWING_EMAIL="[email protected]" 
Смежные вопросы