Rank in database opslaan
Goedenavond,
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.
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.
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.
punten rand
200 1
198 2
190 3
100 4
En dit via een script dat je op de x tijd aanroept.
Je hebt het juist.
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.
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.
Je zal zo iets kunnen doen maar behalve dat dit 'zwaar' voor de server is is het ook niet echt netjes.
Eigenlijk zou je alles in één query moeten updaten maar hoe dat precies moet weet ik eigenlijk niet. pgFrank kom er eens in...
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.
Misschien begrijp ik het verkeerd, maar je wilt niet de rank in de tabel opslaan.
Sla alleen het puntenaantal op en bereken dan de ranks.
Sla alleen het puntenaantal op en bereken dan de ranks.
Je begrijpt het verkeerd, ik heb de puntenaantallen opgeslagen en ik bereken dan de ranks, en ook die sla ik op, zodat ik ze makkelijk kan opvragen.
Oplossing is al gevonden ;)
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.




