Ik heb een script waarbij ik alle gebruikers rangschik op 'punten'. Degene met het meeste punten staat uiteraard op de eerste plaats. Ik werk met een lus, er staan zoveel gebruikers in de rangschikking als dat er gebruikers zijn. Ik gebruik $i ++ om de #posities weer te geven (1,2,3) enz.
Nu is mijn vraag, hoe kan ik bij alle personen hun rank in de database zetten, zodat ik wanneer ik bv zijn profiel bekijk, ik zie staan: Rank: 34.
Practisch voorbeeldje:
Mark heeft 100 punten en staat aan de leiding. In de rangschikking heeft hij dus rank 1. Hoe kan ik er nu voor zorgen dat in de database van mark zijn rank geupdate word, zodat ik ten allen tijden zijn rank uit de database kan halen zonder eerst alle gebruikers te rangschikken en de hele rambam..
Dank.
?
Onbekende gebruiker
14-09-2007 23:07
Als ik het goed begrijp rangschik je dus alles op punten en wil je het positie nummer als rank gebruiken dus zo:
punten rand
200 1
198 2
190 3
100 4
En dit via een script dat je op de x tijd aanroept.
Ik wil dus inderdaad het positienummer opslaan als rank.
Het rangschik script kan iedereen oproepen wanneer hij wil, en VOORLOPIG wordt dus iedere keer die rank geupdate in database.
?
Onbekende gebruiker
14-09-2007 23:26
Je zal zo iets kunnen doen maar behalve dat dit 'zwaar' voor de server is is het ook niet echt netjes.
<?php
$sql = "SELECT * FROM tabel ORDER BY punten DESC";
$res = mysqli_query($con, $sql);
$i = 0;
while ($row = mysqli_fetch_assoc($res))
{
$i ++;
$sql = "UPDATE tabel SET rank = " . $i . " WHERE id = " . $row['id'];
mysqli_query($con, $sql);
}
?>
Eigenlijk zou je alles in één query moeten updaten maar hoe dat precies moet weet ik eigenlijk niet. pgFrank kom er eens in...
Misschien kun je beter het aantal punten opslaan en de rank berekenen en in een session variabel stoppen, anders heb je onnodige informatie in he database, beetje zonde.