2012-06-23 8 views
-4

사용자의 email_id과 사용자의 추종자 인 email_id을 저장하는 MySQL 테이블이 있습니다. 그것의 열은 다음과 같습니다 사람들의추종자 수를 계산하는 쿼리

  1. 수 그가
  2. 그는
  3. 을 가지고 추종자의 수는 다음과 같은 경우 : 사용자가 자신의 계정에 로그인 한 상태에서
    ID, USER_EMAIL, FOLLWING_EMAIL 
    

    지금, 내가 계산할

그는 다음의 백성의 수를 계산하는 것은 간단하다

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, subselects없이 그것을 할 수있는 좋은 방법 – 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

그 중 하나를 QUICY로 계산할 수 있습니까? –

0

FOLLOWING_EMAIL이 (가)이 사용자의 이메일 주소는 다음과 같습니다. 아니면 다른 테이블에 인덱스? 이전, 다음 경우 : 당신은 당신의 코드를 추가하는 경우

SELECT COUNT(*) from list where FOLLOWING_EMAIL="[email protected]" 
관련 문제