Rank in database opslaan
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.
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?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);
}
?>
$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...
Nu, dat enkel ik en men mede programmeur online zijn, kan ik dit nog, later pas ik dat wel aan zodat dat niet meer zwaar is voor de server.
Sla alleen het puntenaantal op en bereken dan de ranks.
Oplossing is al gevonden ;)
Hoe heb je het dan opgelost?
Zo en klaar is kees.
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.