2016-09-09 2 views
0

가이 하나 개의 테이블 인 점수에서 다른 사람에 비해 순위하기 mysql- 내 MEMBER_ID가 '35'인 경우 , 내 순위가 될 것 '1',은 자기

제 MEMBER_ID가 '22'인 경우 제 MEMBER_ID가 '34'인 경우

내 순위가

,

내 MEMBER_ID가 '33'인

, 내 순위 '2'것, '2'일 것이다 내 순위가 '3',

....

등등.

시도 - 1

SELECT * FROM (
SELECT member_id, 
      @points := @points + 1 AS rank 
FROM  test_member p, (SELECT @points := 0) r 
ORDER BY points DESC 
) t 
WHERE member_id='33'; 

+-----------+----------------------------------------+ 
| member_id | rank         | 
+-----------+------------+------+---------+----------+ 
|  33 | 3.000000000000000000000000000000  | 
+-----------+----------------------------------------+ 

시도 - 2 (mysql을 + PHP는 방법)

<?php 
$simulation_ponits = 1000; 

$sql = ' 
    SELECT t.points, COUNT(*) as count_num 
    FROM test_member as t 
    WHERE t.points > ' . $simulation_ponits . ' 
    GROUP BY t.points 
    HAVING t.points > ' . $simulation_ponits .' 
'; 

$result = mysql_query($sql); 

$count_rank = 1; 
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
    $count_rank +=$row['count_num']; 
} 


+--------+-----------+ 
| points | count_num | 
+--------+-----------+ 
| 2000 |   2 | 
| 3000 |   1 | 
+--------+-----------+ 


# $count_rank => 3 

두 시도는 MySQL의 + 바로 결과를 보여줄 수 PHP는 방법은 내가 할 수있는,이다 다른 방법으로이 작업을 시도 했습니까? 미리 감사드립니다.

답변

0

행 번호가 아닌 순위를 얻으려고합니다. 다음은 작동합니다 :

SELECT * FROM (
    SELECT member_id, 
      @rnk := @rnk + if (@prevPoints = points, 0, 
         if (@prevPoints := points, 1, 1)) as rnk 
    FROM  test_member p, (SELECT @rnk := 0, @prevPoints := null) r 
    ORDER BY points DESC 
) t 
WHERE member_id = 33 
+0

예, 이것이 내가 원하는 것입니다, 감사합니다. – kkasp