Ranglijst Maken
Ik heb een probleem met het maken van een ranglijst. Ik ben op dit moment bezig met een projectje waarin ik een ranglist moet hebben waarin de spelers ($Spelers) op volgorde van het aantal punten ($Punten of $Punten*naam* (waarin *naam* de naam van de speler is). Nu is het probleem dat het aantal punten die de speler heeft worden berekend op het moment dat hij de pagina opent met zijn naam erin.
Een voorbeeld is dat als de speler Henk heet hij naar http://www.XX.nl/XX/Henk.php en daarin alle behaalde punten kan zien voor dingen die hij gedaan heeft.
Waarin de ranglijst er bijvoorbeeld zo uit moet komen te zien (Het liefst in een tabel):
1. Henk 12
2. Kees 6
2. Jan 6
4. Pietje 5
Ik hoop dat je het begrijpt, zo niet, dan zal ik proberen het duidelijker uit te leggen.
P.S. het spijt me als deze vraag niet op de goede plek staat. Misschien dat ik hem beter had kunnen zetten bij Algemene PHP scripting, maar dit is toch een vraag die voor iedereen wel handig kan zijn.
Gewijzigd op 07/12/2013 21:07:21 door Bodi Boele
waarbij ik dan even er vanuit ga dat er een database bij betrokken is
Nee, er is geen database bij betrokken, omdat een database maken voor zoveel gegevens *ca. 200 per persoon* waarbij er meer dan 50 personen mee spelen is dit voor mij niet ideaal. En ook omdat alle gegevens opgeslagen moeten worden zal het wat lastiger gaan. Maar ik ga die van stackoverflow ff proberen. Toch bedankt!
1 tabel met soortengegevens (200 records in de kolommen soortgegeven_id en gegevensnaam)
1 tabel met waarden:
bevat user_id, soortgegeven_id en een kolom met waarde
Dat jij nog niet weet wat een database is, is mijns inziens de reden tegen het gebruik van een database. Dat is niet erg, dat is een leermoment.
Erwin H op 08/12/2013 10:37:45:
Veel gegevens is niet een reden tegen een database, maar jusit een reden voor het gebruik van een database. Waarbij 50 * 200 = 10.000 records overigens nog helemaal niet als 'veel' wordt gezien bij een beetje database.
Dat jij nog niet weet wat een database is, is mijns inziens de reden tegen het gebruik van een database. Dat is niet erg, dat is een leermoment.
Dat jij nog niet weet wat een database is, is mijns inziens de reden tegen het gebruik van een database. Dat is niet erg, dat is een leermoment.
Dat is zeker ook een reden :p, ik heb heel weinig ervaring met het gebruiken van een database, dus misschien tijd voor een eerste keer.
Gewijzigd op 08/12/2013 12:18:55 door Bodi Boele
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?
mysql_connect($mysql['host'], $mysql['username'], $mysql['password']);
mysql_select_db($mysql['database']);
$sql = mysql_query('SELECT *FROM `ranglijst` ORDER BY `ranglijst`.`Punten` ASC LIMIT 0, 1000 ') or die(mysql_error());
Print '<div class="CSSTableGenerator" >';
Print "<Table>";
echo "<tr><td>Plaats</td><td>Naam</td><td>Punten</td></tr>";
$i = 1;
while($info = mysql_fetch_array( $sql ))
{
Print "<tr>";
Print "<td>".$i++. "</td> ";
Print "<td>".$info['Deelnemer'] . "</td> ";
Print "<td>".$info['Punten'] . " </td></tr>";
}
Print "</table></div>";
?>
mysql_connect($mysql['host'], $mysql['username'], $mysql['password']);
mysql_select_db($mysql['database']);
$sql = mysql_query('SELECT *FROM `ranglijst` ORDER BY `ranglijst`.`Punten` ASC LIMIT 0, 1000 ') or die(mysql_error());
Print '<div class="CSSTableGenerator" >';
Print "<Table>";
echo "<tr><td>Plaats</td><td>Naam</td><td>Punten</td></tr>";
$i = 1;
while($info = mysql_fetch_array( $sql ))
{
Print "<tr>";
Print "<td>".$i++. "</td> ";
Print "<td>".$info['Deelnemer'] . "</td> ";
Print "<td>".$info['Punten'] . " </td></tr>";
}
Print "</table></div>";
?>
Gewijzigd op 24/12/2013 18:28:09 door Bodi Boele
plaats en vorige_plaats.
En dan berekenen op welke plaats ze staan, heb je ook geen $1++ nodig.
Dan kun je simpel de rij plaats met een print weergeven.
Alleen zou ik niet met hoofdletters werken.
Dus als je de punten aan de deelnemers toekent, doe je aan het einde elke keer berekenen op welke plaats ze staan.
Hoop dat je er wat aan hebt.
Groet Mausie.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
//alle deelnemers er bij halen
$sql_plaats = mysql_query("SELECT * FROM `ranglijst` ORDER BY punten DESC, deelnemer ASC")or die(mysql_error());
$plaats = 1;
$plaats_temp = 1;
$punten_vorige_user = 0;
while ($row_plaats = mysql_fetch_array($sql_plaats))
{
$user_id = $row_plaats['user_id'];
$vorige_plaats = $row_plaats['plaats'];
if ($row_plaats['punten'] < $punten_vorige_user)
{
$plaats = $plaats_temp;
}
$punten_vorige_user = $row_plaats['punten'];
$plaats_temp += 1;
//de juiste plaats toekennen aan de deelnemers
$Update_plaats = mysql_query("UPDATE `ranglijst` SET vorige_plaats = '".$vorige_plaats."', plaats = '".$plaats."' WHERE user_id = '".$user_id."'");
}
if($Update_plaats){
print "Plaatsen zijn goed berekend";
}else{
print "Er is iets fout gegaan met de berekenen van de plaatsen Error: ". mysql_error;
}
?>
//alle deelnemers er bij halen
$sql_plaats = mysql_query("SELECT * FROM `ranglijst` ORDER BY punten DESC, deelnemer ASC")or die(mysql_error());
$plaats = 1;
$plaats_temp = 1;
$punten_vorige_user = 0;
while ($row_plaats = mysql_fetch_array($sql_plaats))
{
$user_id = $row_plaats['user_id'];
$vorige_plaats = $row_plaats['plaats'];
if ($row_plaats['punten'] < $punten_vorige_user)
{
$plaats = $plaats_temp;
}
$punten_vorige_user = $row_plaats['punten'];
$plaats_temp += 1;
//de juiste plaats toekennen aan de deelnemers
$Update_plaats = mysql_query("UPDATE `ranglijst` SET vorige_plaats = '".$vorige_plaats."', plaats = '".$plaats."' WHERE user_id = '".$user_id."'");
}
if($Update_plaats){
print "Plaatsen zijn goed berekend";
}else{
print "Er is iets fout gegaan met de berekenen van de plaatsen Error: ". mysql_error;
}
?>
Ik zou controleren wat het puntenaantal is bij de huidige run door de while-lus en wat het vorige puntenaantal (bij het doorlopen van de lus) was.
Indien gelijk --> i niet ophogen, maar tonen (wel een extra variabele om te bepalen hoeveel keren hetzelfde aantal punten voorkomt.
Indien ongelijk --> i ophogen met 1 of het aantal keren dat bleek dat hetzelfde puntenaantal was.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
SELECT
naam,
punten,
FIND_IN_SET(punten, (SELECT punten FROM ranglijst ORDER BY punten DESC)) AS positie
FROM
ranglijst
ORDER BY punten DESC, naam
naam,
punten,
FIND_IN_SET(punten, (SELECT punten FROM ranglijst ORDER BY punten DESC)) AS positie
FROM
ranglijst
ORDER BY punten DESC, naam
FIND_IN_SET geeft de positie(index) van de eerst gevonden waarde
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?
mysql_connect($mysql['host'], $mysql['username'], $mysql['password']);
mysql_select_db($mysql['database']);
$sql = mysql_query('SELECT *FROM `ranglijst` ORDER BY `ranglijst`.`Punten` ASC LIMIT 0, 1000 ') or die(mysql_error());
Print '<div class="CSSTableGenerator" >';
Print "<Table>";
echo "<tr><td>Plaats</td><td>Naam</td><td>Punten</td></tr>";
$i = 1;
while($info = mysql_fetch_array( $sql )){
Print "<tr>";
if($oud == $info['Deelnemer']){
Print "<td>".$e. "</td> ";
$i++;
}
else {
Print "<td>".$i++ ."</td> ";
$e = $i ;
}
Print "<td>".$info['Deelnemer'] . "</td> ";
Print "<td>".$info['Punten'] . " </td></tr>";
$oud = $info['Punten'];
}
Print "</table></div>";
?>
mysql_connect($mysql['host'], $mysql['username'], $mysql['password']);
mysql_select_db($mysql['database']);
$sql = mysql_query('SELECT *FROM `ranglijst` ORDER BY `ranglijst`.`Punten` ASC LIMIT 0, 1000 ') or die(mysql_error());
Print '<div class="CSSTableGenerator" >';
Print "<Table>";
echo "<tr><td>Plaats</td><td>Naam</td><td>Punten</td></tr>";
$i = 1;
while($info = mysql_fetch_array( $sql )){
Print "<tr>";
if($oud == $info['Deelnemer']){
Print "<td>".$e. "</td> ";
$i++;
}
else {
Print "<td>".$i++ ."</td> ";
$e = $i ;
}
Print "<td>".$info['Deelnemer'] . "</td> ";
Print "<td>".$info['Punten'] . " </td></tr>";
$oud = $info['Punten'];
}
Print "</table></div>";
?>
Gewijzigd op 30/12/2013 19:45:49 door Bodi Boele