2010-07-27 2 views
0

:MySQL에서 문자열의 첫 번째 위치를 결정 하시겠습니까? 이 같은 테이블의 경우

username  | time 
--------------------------------------- 
animuson  | 0.678 
aP*animuson  | 0.967 
animuson  | 0.567 
qykumsoy  | 0.876 

나는 이름이 발생하고 사용자 이름이 한 번만 계산되는 경우 위치를 찾아 다음 번 이러한 주문하기 MySQL은 방법을 찾기 위해 노력하고있어. 따라서, 'qykumsoy'라는 사용자 이름을 검색하는 경우 'animuson'시간이 빠르기 때문에 2를 반환해야하지만 가장 빠른 것만 계산하면 'qykumsoy'가 그 다음으로 빠릅니다. 그룹화하고 주문할 수는 있지만 사용자 이름이 어떤 위치에 있는지 어떻게 알 수 있습니까? MySQL에서이 작업을 수행하는 것이 PHP의 모든 결과를 반복하는 것보다 빠르다는 것을 알았습니다. 잘못된 것이라면 저를 수정하십시오. 내가 지금까지 생각했습니다 무엇

:

SELECT * FROM `times` ORDER BY MIN(`time`) GROUP BY `username` 

나는 아주 잘, MySQL과 단지 기본적인 물건을 경험하고 있지 않다. 어떤 아이디어?

답변

0

은 무엇 후 당신은 테이블의 데이터와 관련있는 순위입니다 - MySQL은 어떤 순위/분석/윈도우 기능을 가지고 있지 않지만 두 가지 옵션이 있습니다 -이 :

SELECT x.rank 
    FROM (SELECT t.username, 
         t.time, 
         (SELECT COUNT(*) 
           FROM TABLE y 
          WHERE y.time <= t.time) AS rank 
       FROM TABLE t) x 
WHERE x.username = 'qykumsoy' 

을 .. 변수 사용 :

SELECT x.rank 
    FROM (SELECT t.username, 
         t.time, 
         @rownum := @rownum + 1 AS rank 
       FROM TABLE t 
        JOIN (SELECT @rownum := 0) r 
     ORDER BY t.time DESC) x 
WHERE x.username = 'qykumsoy' 
관련 문제