Hallo,

Ik probeer een rangschikking te maken voor deelnemers aan een voetbalpool.
Ik gebruik hiervoor de volgende code:

<?
// sorteert de lijst 'user' op puntentotaal ('curpoint')
$query = "SELECT * FROM user ORDER BY curpoint DESC";
$ranking = mysql_query($query) or die('Zoekopdracht niet gelukt: ' . mysql_error());
$aantal = mysql_num_rows($ranking);

// Iedere gebruiker krijgt een rangschikking, a.d.h.v. gesorteerde lijst
for($i=1; $i <= $aantal; $i++) {
while($result1 = mysql_fetch_array($ranking)) {
$waarde = "currank";
$rang = $i++;
// plaatst rangschikkingwaarde ('$rang') in record van gebruiker ('currank')
$query="UPDATE user SET ".$waarde." ='".$rang."' WHERE ".email." = '".$result1['email']."'";
// echo $query;
$invoer = mysql_query($query);
}
}

?>

Dit werkt in principe goed. Probleem is echter dat de rangschikking gewoon doortelt als deelnemers hetzelfde aantal punten hebben.
Dus als Jan 150 punten heeft, Piet 140, Henk 140, en Karel 130. Dan zou de rangschikking moeten zijn:
1 Jan 150
2 Piet 140
2 Henk 140
4 Karel 130

Op dit moment is het echter gewoon oplopend:
1 Jan 150
2 Piet 140
3 Henk 140
4 Karel 130

Hoe kan ik dit oplossen? Wellicht is de oplossing simpel, maar ik ben nog een echte PHP-noob... :-)




Dit doe je in SQL, niet in PHP.

Ik zal even zoeken, ik heb ergens een query liggen die dit voor je regelt. Momentje
Dit is hem geworden:

SELECT
    a1.naam, 
    a1.curpoint, 
    COUNT(a2.curpoint) AS ranking 
FROM 
    user a1, 
    user a2 
WHERE 
    a1.curpoint <= a2.curpoint 
OR 
    (
        a1.curpoint = a2.curpoint 
    AND 
        a1.naam = a2.naam
    ) 
GROUP BY 
    a1.naam, 
    a1.curpoint
ORDER BY 
    a1.curpoint DESC, 
    a1.naam DESC

Uiteraard ga je géén UPDATE-query uitvoeren, een ranking is een berekend gegeven en die sla je nooit (lees: zeer zelden) op in een database. Wanneer jij de ranking nodig hebt, voer je de SELECT-query uit en klaar ben je.
Kun je wat uitleg geven over het a1 en a2 verhaal?
Dit is me niet helemaal duidelijk...
(ik zei het al: ik ben een php-noob.. :-))
Dat zijn aliassen van de tabel 'user'. Deze tabel wordt namelijk voor meerdere zaken gebruikt, op die manier kun je records onderling met elkaar gaan vergelijken en zo een juiste ranking en sortering opbouwen.

SQL voor gevorderen, dit maakt het PHP-leven een heel stuk eenvoudiger. Het grootste gedeelte van jouw PHP-code kun je dus weggooien en je hebt slechts 1 query nodig. SQL is toch zo'n mooi taaltje!

Reageren