2016-07-05 4 views
-1

나는 ID가 대 포인트의 테이블을 가지고, 그 포인트에 따라 필요한 ID의 순위를 반환하고 싶습니다. 포인트에 따라 오름차순으로 테이블을 정렬 한 다음 요청한 ID의 행 번호를 선택할 수 있다면이 작업을 수행 할 수 있다고 생각합니다. 문제는 하나의 쿼리에서 두 작업 (테이블 정렬 및 행 번호 선택)을 수행하는 방법을 모르겠다는 것입니다.정렬 및 하나의 MYSQL 쿼리에서 행 번호를 얻는 방법

참고 : php prepared statement를 사용하여 쿼리를 수행하고 있습니다.

두 단계를 한 번에 수행하는 방법에 관한 도움이 필요하시면 언제든지 문의하십시오.

데이터 샘플 :

ID  Points 
x  12 
y  15 
w  4 
z  30 

필수 : ​​내 필요가 지금 선택하는 것입니다,

to return the rank of any ID. example.. Where Id = y --> it returns "2". (the rank in the table) 

업데이트

나는 아래의 코드를 수행하며 테이블을 정렬하고 올바르게 순위를 제공합니다 필요한 ID (여기서 ID = x) 그렇게하는 방법?

SET @rank=0; 
SELECT ID, Points, @rank:[email protected]+1 AS rank From Cars ORDER BY Points DESC; 
+0

샘플 데이터와 원하는 결과를 제공해주십시오. 두 행의 점수가 같을 때 수행 할 작업에 특히주의하십시오. –

+0

질문을 편집했습니다. 감사. 두 행에 같은 점이 있으면 행 번호를 반환하므로 영향을 미치지 않습니다. 위의 예제에서 –

답변

1

이 예제가 도움이

mysql> SELECT ID,points, @curRank := @curRank + 1 as rank from gg ,(SELECT @curRank := 0) r order by points; 
+------+--------+------+ 
| ID | points | rank | 
+------+--------+------+ 
| w |  4 | 1 | 
| x |  12 | 2 | 
| y |  15 | 3 | 
| z |  30 | 4 | 
+------+--------+------+ 
4 rows in set (0.00 sec) 
+0

위의 예제에서 위의 예제와 같이 쿼리를 수정하려고 시도한 순위가 –

+0

입니다. Mahesh에게 감사하지만이 방법으로 순위를 얻은 방법을 이해할 수 없습니다 (@curRank : = @curRank + 1)? –

+0

나는 초기 값을 o로 정의하고 각각의 원래 값에 대해 쿼리를 추가하면 값이 증가한다. 수정하는 데 도움이 될 수있다. –

0

당신은 하위 쿼리를 사용하여 MySQL의에서 공식 ANSI 순위 기능을 구현할 수 있습니다

select t.*, 
     (select 1 + count(*) 
     from t t2 
     where t2.points < t.points 
     ) as rank 
from t; 

이 또한 변수를 사용하여 수행 만이 할 수있다 다소 복잡합니다.

+0

나는 진짜로 어떻게 이해할 수 없다 (t2에서 1 + count (*)를 선택한다. t2.points

관련 문제