2017-05-01 5 views
0

그래서 현재 데이터베이스에 'users'라는 테이블이 있습니다.PHP/MySQL 추천 횟수에 따라 사용자 순위 지정 및 하나의 레코드 선택

'사용자'에는 '이메일'과 'ReferralCount'라는 두 개의 열이 있습니다.

예 :

내가 할 수 있기를 원하는 것은
Email  ReferralCount 
[email protected] 5 
[email protected] 3 
[email protected] 7 

, 가장 높은 추천 횟수가 등등 순위 1해진다 그들의 추천 수에 근거하여,이 테이블의 데이터를 순위입니다. 그런 다음 이메일 주소를 기반으로 해당 사용자의 순위를 알 수 있어야합니다.

나는 기본적인 SQL만을 사용 했으므로 어떻게해야 할 지 잘 모르겠다.

많은 도움을 주셨습니다.

+0

ReferralCount를 기준으로 내림차순으로 주문하고 수행하십시오. – manian

+0

조회수를 기반으로보기를 만들고 거기에 순위를 지정해야합니다. 일단보기가 캐시에 저장소를 생성하고 거기에서 쿼리를 실행하면 사용자에게 새보기를 다시 만드는 것보다 새로운 업데이트가있는 경우 해당보기가 생성됩니다. – JiteshNK

+0

어떻게 넥타이를 처리 하시겠습니까? [email protected]도 5 추천이었습니다 ... 그들은 모두 2 순위입니까? 1 순위 2 순위입니까? 둘 다 3인가요? – xQbert

답변

2

이것은 "순위"가 의미하는 바에 따라 약간 다릅니다. 다음은 관계 모두 같은 값을 가질 수 있도록 "조밀 한 순위"를 가져옵니다

select 1 + count(distinct u.referralcount) 
from users u 
where u.referralcount > (select u2.referralcount from users u2 where u2.user = @email); 
+0

미안하지만이 질문에 하위 쿼리를 사용하는 것이 좋습니까? @Gordon Linoff – JiteshNK

+1

하위 쿼리를 사용하는 것이 좋으며 종종 특정 쿼리를 작성하는 유일한 방법입니다. 사용자 테이블의 두 인스턴스를 결합하는 것이이 문제를 해결하는 또 다른 방법이 될 수 있지만 하위 쿼리는 문제가 없습니다. – RToyo

0

편집 : 사과, 고든 리노 프는 이미 더 직접적으로 질문에 대답했다. 이것은 내가 응답하는 동안 산만 해지는 것에 대해 얻는 것입니다. :)


당신은 많은 사용자 행이 높은 추천 카운트를하는 방법의 수를 얻을 다음 문제의 이메일에 대한 ReferralCount을 잡아 하위 쿼리를 사용하고 있습니다.

하위 쿼리가 사용자의 ReferralCount를 얻습니다 (예 : [email protected]의 경우 "5") : select ReferralCount from users where Emai[email protected].

where 절에서 하위 쿼리로 사용하면 ReferralCount가 더 많은 사용자 수를 계산할 수 있습니다 (순위에 1을 추가해야 함). "1"이상의 사용자가 반환되면 " 2 ") 현재 사용자의 순위로 :

select 
    (count(*) + 1) as Rank 
from 
    users 
where 
    ReferralCount > (select ReferralCount from users where [email protected]) 

이 출력됩니다"2 ", [email protected] 이상 만 [email protected]이 있기 때문에 더 많은 추천.

동일한 ReferralCount를 가진 사용자는 건너 뛸 수 있습니다. 예를 들어 3 명의 사용자가 모두 "10"추천을 가지고 있고 쿼리하는 사용자가 "9"이면 위의 쿼리는 9 명의 추천이 10 위에 2 위 밖에 없지만 "4"의 순위를 출력합니다. "2"(2 위)의 순위를 반환한다면 ReferralCount의 고유 카운트를 얻을 수 있습니다.

select 
    (count(distinct ReferralCount) + 1) as Rank 
from 
    users 
where 
    ReferralCount > (select ReferralCount from users where [email protected]) 
+0

각 열에 순위를 지정하지 않습니다. 또 하나의 stackoverflow 항목이 실제로이를 제공합니다. http://stackoverflow.com/questions/2520357/mysql-get-row-number-on-select - 체크 아웃하고 동의한다면, 당신은 아마 당신의 대답을 편집 할 수 있을까요? –

+0

@DavidSvarrer 그 대답을 가르쳐 주셔서 감사합니다. 그러나 나는 그 질문과 OP의 질문 사이에 직접적인 연관성을 보지 못하고있다. 아마도 조금 더 자세히 설명 할 수 있을까요? 제 이해는 OP의 질문이 개별 행의 순위에 대해 묻는 반면, 연결된 질문은 여러 개의 반환 된 행에 대해 행 번호를 생성하기를 원합니다. 기본적으로 OP는 전체 테이블 내에서 행의 순위를 묻는 반면, 그 질문은 결과 집합 내에서 행의 순위를 묻습니다. 아마 내가 뭔가를 간과 했나? – RToyo

+1

@RobbieToyota 올바른 전체 테이블 내에서 행의 순위를 묻습니다. – fldchris