2013-06-03 2 views
0

나는 다음과 같은 행이 : 나는 SELECT * FROM table ORDER BY score DESC을 수행 할 때행 집합의 행의 순위를 점점

id  name  score 

1   Bill  0 
2   Kim   8 
3   Michael  30 
4   Doug  22 
5   Mellisa  1 

것은, 나는

id  name  score 

4   Doug  22 
3   Michael  30 
2   Kim   8 
5   Mellisa  1 
1   Bill  0 

가 지금은 하나의 행을 취득 할 수, 그래서 ' where 절을 추가하되 문제점은 순위입니다.

내가 두 번째 순위 2가 할당되고, 의사가 행 집합의 첫 번째 행에 순위 1을 할당 즉, 내 PHP 코드에서 순위를 생산하고 있습니다 등등 ...

그래서 SELECT * FROM table WHERE id = 5을 수행 할 때, 분명히 모든 등급 정보가 손실됩니다. 이 문제를 극복하는 방법? where 절을 추가하기 전에 행 집합에서 행의 위치를 ​​얻을 수있는 방법이 있습니까?

답변

4

하위 쿼리에서 쿼리를 래핑하여 순위가 유지되도록합니다. 다음은 예입니다,

-- the example produces rank based on highest score. 
SELECT * 
FROM 
     (
      SELECT @rank := ifnull(@rank, 0) + 1 Rank, 
        Id, name, Score 
      FROM tableName a 
      ORDER BY Score DESC 
     ) x 
WHERE ID = 5 
+1

'@rank = IFNULL (@rank, 0) + 1 '와 from 절에는 비밀스러운 선택이 없지만 +1이 필요합니다. http://www.sqlfiddle.com/#!2/7dc7b/3 – Bohemian

+0

@ 보헤미안을 참조하십시오. 어쨌든 OP는 자신 만의 방식으로':)'' –

+0

@Bohemian it 's clean':)' –

1
SELECT id, name, score, FIND_IN_SET(score, (
SELECT GROUP_CONCAT(score 
ORDER BY score DESC) 
FROM ScoreDetail) 
) AS rank 
FROM ScoreDetail 
Where id=5 

.... 내가 선호

+0

'score'가 파생 된 열일 때 영리하지만 작동하지 않습니다. –

관련 문제