2010-12-08 4 views
3

USER 테이블에는 userIdpoint 필드가 있습니다. 런타임에 특정 지점의 특정 사용자 순위가 무엇인지 알고 싶습니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?
1 : 모든 사용자를 목록에 쿼리합니다. 포인트 기반리스트베이스를 정렬하고 이진 검색을 수행하여 해당 사용자의 순위를 찾습니다. 여기 나쁜 생각처럼 들리 네요.
2 : 데이터베이스 쿼리를 만들어 이러한 작업을 수행 할 수 있습니까?랭킹 시스템을위한 좋은 디자인은 무엇입니까

2000-5000 명의 사용자가 필요합니다.

+1

다시 생각해보십시오. 시스템에서 "순위"가 무엇을 의미하는지 정의하는 방법은 무엇입니까? –

+0

@Peter : 순위는 사용자 목록의 사용자 항목 수를'point '로 예상합니다. – Vlad

+1

@Harry : user로부터 "rn from user", "what what"; (나는 SQL 문법이 정말 좋지 않다.) – Vlad

답변

5
SET @rownum := 0; 

SELECT rank, userId, point 
FROM (
     SELECT @rownum := @rownum + 1 AS rank, userId, point 
     FROM user ORDER BY point DESC 
    ) 
as result WHERE userId = xxxxxxxx 
+0

고마워요. 코드에서 변수'rank'를 계산하는 방법에 대해 조금 설명해주십시오. 위의 코드는 mysql 구문인가? 단지'SET @rownum : = 0;'을 전에 보지 못했습니다. +1 –

+0

확실히, 기본적으로 포인트 오른쪽에 따라 테이블을 정렬하고 있습니다. 그리고 당신이 원하는 것은 각 레코드에 대한 행 번호를 얻는 것입니다. '@ rownum' 변수는 정확하게 그것을합니다. 마지막에 특정 사용자 ID에 대한 레코드를 얻습니다. –

관련 문제