테이블이 위와같이 되어있는데요
랭킹시스템을 구현하려고 합니다.
그렇다고 1~100위까지 차례대로 모두 뽑느것이 아니라
ptr이 높은순서대로 1~10위까지 해당 id가 속해 있으면
해당 id가 몇위인지 알고 싶습니다.
SELECT rank FROM
(SELECT id, ptr, @rank := @rank +1 AS rank
FROM (SELECT u.id, u.ptr
FROM doodle_login u LEFT JOIN doodle_login u2 ON u.id = u2.id AND u.ptr < u2.ptr WHERE u2.ptr IS NULL ORDER BY u.ptr DESC)zz, (SELECT @rank :=0)z LIMIT 0 , 10)w WHERE w.id = 'id값'
위와 같이 햇엇는데 51900개 row가 있는데 0.5초가 걸린다는 단점이 있습니다
물론 인덱스도 걸려 있습니다. |