2010-05-30 7 views
0

작은 프로젝트의 순위 관리자를 만들려고합니다. 합계는 데이터베이스에 저장됩니다. mysql을 사용하여 최대 및 최소를 쉽게 얻을 수 있으며 내림차순으로 레코드를 정렬 할 수 있습니다 . 문제는 동점이있을 때 온다. 나는 1,2,3,3,5,5,7,7,7 등의 형태로 동점을 표시해야한다. 이러한 관계를 성취 할 수있는 방법을 생각해 왔지만 더 많은 아이디어가 필요해 내 것이 길고 복잡해 보입니다.가장 높은 순위에서 가장 낮은 순위로 연결될 때의 처리 관계

누구나 자신의 생각을 공유 할 수 있습니까?

+0

당신은 같은 점수를 강조하고 싶어? 그리고 당신의 아이디어를 보여주십시오. –

+0

배열을 반환하고 mysql에서 데이터를 채울 필요가 있기 때문에 일단 완료되면 게시 해 보겠습니다. – Gandalf

+0

안녕하세요. Tom은 최종 코드를 확인합니다. http://stackoverflow.com/questions/2941898/building-ranking-system-with-data-from-the-database/2944786#2944786 – Gandalf

답변

-1

SQL에서 그렇게 할 수 없습니까? 중복 순위가있는 레코드는 계속 출력되지만 넥타이 내의 순서는 정의되지 않습니다.

아, 질문에 대한 오해가있는 것 같습니다. 감사합니다. 이것은 상대적으로 간단한 SQL 쿼리로도 여전히 달성 할 수 있습니다. 열쇠는 하위 쿼리를 사용하여 이미 통과 한 고유 한 점수를 계산하는 것입니다.

SELECT id, score, (
    SELECT COUNT(DISTINCT score) + 1 
    FROM mytable 
    WHERE score < outerscore.score 
    ORDER BY score ASC 
) AS rank 
FROM mytable as outertable 
ORDER BY score ASC; 
+0

요점은 순위가 데이터베이스에 정의되어 있지 않습니다. 그는 점수로 그것을 계산해야합니다. – Matchu

0
$data = array(
    'A'=>19,'B'=>18,'C'=>17,'D'=>17,'E'=>16,'F'=>15 
); 

$rank = 0; 
$lastScore = PHP_INT_MAX; 
foreach($data as $name=>$score) { 
    if ($lastScore !== $score) { 
    $lastScore = $score; 
    $rank += 1; 
    } 
    printf("%s %d (%d)\n", $name, $score, $rank); 
} 

인쇄

A 19 (1) 
B 18 (2) 
C 17 (3) 
D 17 (3) 
E 16 (4) 
F 15 (5) 
관련 문제