Ranking in MYSQL/PHP query

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jeroen Nick

Jeroen Nick

11/11/2016 12:23:00
Quote Anchor link
Hallo allemaal,

Ik heb voor een dart competitie een tabel aangemaakt in mijn MYSQL database met bijbehorende kolommen:

- ID, Spelers, hondertachtig, Gespeeld en Punten

Ik zou graag de gegevens willen ranken op de hoeveelheid punten en dat deze ranking automatisch wordt aangemaakt.
Momenteel heb ik een tweede tabel aangemaakt voor de ranking maar dit is niet flexibel genoeg.

Zie hier mijn code die ik nu gebruik:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?php
$servername
= "localhost";
$username = "****";
$password = "****";
$dbname = "****";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}


$sql = "SELECT Speler, Gespeeld, honderdtachtig, Punten FROM seizoen16 ORDER BY punten DESC";
$result = $conn->query($sql);

echo "<table class='seizoentabel2' align='left'>
        <th>Pos.</th>
        <tr><td>1</td></tr>
        <tr><td>2</td></tr>
        <tr><td>3</td></tr>
        <tr><td>4</td></tr>
        <tr><td>5</td></tr>
        <tr><td>6</td></tr>
        <tr><td>7</td></tr>
        <tr><td>8</td></tr>
        <tr><td>9</td></tr>
        <tr><td>10</td></tr>
        <tr><td>11</td></tr>
        <tr><td>12</td></tr>
        <tr><td>13</td></tr>
        <tr><td>14</td></tr>
        <tr><td>15</td></tr>
        <tr><td>16</td></tr>
        <tr><td>17</td></tr>
        <tr><td>18</td></tr>
        <tr><td>19</td></tr>
        <tr><td>20</td></tr>
        </table>"
;

echo "<table class='seizoentabel'><th>Speler</th><th>Gespeeld</th><th>180</th><th>Punten</th>";

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo
        "<tr><td>" . $row["Speler"]."</td>".
        " " . "<td class='center'>" . $row["Gespeeld"]."</td>".
        "<td class='center'>" . $row["honderdtachtig"]."</td>".
        "<td class='center'>" . $row["Punten"]."</td></tr>";
    }

     echo "</table><br class='clear:both'>";
}
else {
    echo "0 results";
}

$conn->close();
?>



Ik wil dus graag de tabel "seizoentabel2" verwijderen en ervoor zorgen dat de ranking automatisch wordt gemaakt. Heeft iemand hier ervaring mee die mij opweg kan helpen? Alvast bedankt!
 
PHP hulp

PHP hulp

16/11/2024 00:52:19
 
Sander van t Hullenaar

Sander van t Hullenaar

11/11/2016 12:40:22
Quote Anchor link
Je kan een tellertje mee laten lopen in je "seizoentabel".
Bijvoorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
echo "<table class='seizoentabel'><th>Ranking</th><th>Speler</th><th>Gespeeld</th><th>180</th><th>Punten</th>";


if ($result->num_rows > 0) {
    // output data of each row
    $i = 1;
    while($row = $result->fetch_assoc()) {
        echo
        "<tr><td>" . $i."</td>".
        " " . "<td>" . $row["Speler"]."</td>".
        " " . "<td class='center'>" . $row["Gespeeld"]."</td>".
        "<td class='center'>" . $row["honderdtachtig"]."</td>".
        "<td class='center'>" . $row["Punten"]."</td></tr>";
        $i++;
    }

     echo "</table><br class='clear:both'>";
}
else {
    echo "0 results";
}

?>


Je kan dan die andere tabel weg doen.
Gewijzigd op 11/11/2016 12:45:15 door Sander van t Hullenaar
 
Jeroen Nick

Jeroen Nick

11/11/2016 12:50:52
Quote Anchor link
Bedankt sander, ik heb je code uitgeprobeerd maar er komt nu overal als rank 1 te staan, maar ik zou graag 1 tot 20 willen zien (er zijn 20 spelers). Weet je toevallig hoe ik dit voor elkaar kan krijgen?
 
Sander van t Hullenaar

Sander van t Hullenaar

11/11/2016 12:55:07
Quote Anchor link
Heb je mijn code direct gecopy-paste?
Dan zou hij het moeten doen, kan je anders eens laten zien wat je nu hebt?
Vooral de $i++; is belangrijk, die telt er steeds 1 bij op.
 
Jeroen Nick

Jeroen Nick

11/11/2016 13:08:13
Quote Anchor link
ah er stond nog geen ++ in de code, maar nu ik hem erbij heb gezet werkt hij perfect, bedankt sander je bent een held!
 
Ivo P

Ivo P

11/11/2016 13:10:05
Quote Anchor link
En wat als 2 of meer personen evenveel punten hebben?
 
Jeroen Nick

Jeroen Nick

11/11/2016 13:18:36
Quote Anchor link
Ik heb nog een vraagje, naast de algehele ranking heb ik een extra tabel waarbij wordt bijgehouden hoeveel mensen boven de honderd zijn gefinisht.

De ranking werkt ook hier, alleen zijn er mensen die niks hebben gegooid, ik zou dus graag willen dat deze mensen niet in de lijst worden weergegeven.

Oftewel als bovenhonderd leeg is dan moet hij deze speler niet laten zien.

Wellicht dat je mij hier ook bij kunt helpen sander?


Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
31
32
33
34
<?php
$servername
= "localhost";
$username = "arjan";
$password = "scripting123";
$dbname = "s4d";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}


$sql = "SELECT Speler, bovenhonderd FROM seizoen16 ORDER BY bovenhonderd DESC";
$result = $conn->query($sql);

echo "<table class='seizoentabel3'><th>Pos.</th><th>Speler</th><th>Finish(es) 100+</th>";

$i = 1;

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo
          "<tr><td>" . $i++."</td>".
        "<td class=>" . $row["Speler"]."</td>".
        " " . "<td class='center'>" . $row["bovenhonderd"]."</td></tr>";
    }

     echo "</table><br class='clear:both'>";
}
else {
    echo "0 results";
}

$conn->close();
?>


Toevoeging op 11/11/2016 13:19:52:

Ivo P op 11/11/2016 13:10:05:
En wat als 2 of meer personen evenveel punten hebben?

Goeie Ivo! Echter zal dat niet snel voorkomen, maar heb je eventueel een idee hoe we dit kunnen oplossen?
 
Ivo P

Ivo P

11/11/2016 13:21:39
Quote Anchor link
FROM seizoen16

komt er volgend seizoen een tabel seizoen17?

In dat geval zou je beter de tabel omnoemen naar iets zonder nummer en dan een extra kolom toevoegen: seizoennr.

In die kolom sla je dan voor seizoen 16 het getal 16 op en volgend jaar het getal 17. Dat maakt dat je niet in al je code op zoek moet naar "seizoen16" als het seizoen wisselt. Bovendien kun je dan rechtstreeks een vergelijk maken dussen de score in het ene en het andere seizoen.
 
Jeroen Nick

Jeroen Nick

11/11/2016 13:40:55
Quote Anchor link
Ivo P op 11/11/2016 13:21:39:
FROM seizoen16

komt er volgend seizoen een tabel seizoen17?

In dat geval zou je beter de tabel omnoemen naar iets zonder nummer en dan een extra kolom toevoegen: seizoennr.

In die kolom sla je dan voor seizoen 16 het getal 16 op en volgend jaar het getal 17. Dat maakt dat je niet in al je code op zoek moet naar "seizoen16" als het seizoen wisselt. Bovendien kun je dan rechtstreeks een vergelijk maken dussen de score in het ene en het andere seizoen.


Dat is niet nodig, voor elk seizoen maken we simpelweg een nieuwe tabel aan, en het vergelijken tussen seizoenen is iets wat we niet gebruiken. De code is nu bijna zoals we het willen hebben, alleen willen we dus bij de tweede tabel ervoor zorgen dat waneer er geen gegevens staan in "bovenhonderd" dat deze Spelers niet worden getoond.
 
Sander van t Hullenaar

Sander van t Hullenaar

11/11/2016 13:51:11
Quote Anchor link
Vervang in dat geval:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
$sql
= "SELECT Speler, bovenhonderd FROM seizoen16 ORDER BY bovenhonderd DESC";
?>


Door
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
$sql
= "SELECT Speler, bovenhonderd FROM seizoen16 WHERE bovenhonderd <> '' ORDER BY bovenhonderd DESC";
?>
 
Jeroen Nick

Jeroen Nick

11/11/2016 14:02:36
Quote Anchor link
Top het werkt, hartstikke bedankt!

Kun je mij vertellen wat de <> precies doet? Dan leer ikzelf de code beter begrijpen :)
 
Sander van t Hullenaar

Sander van t Hullenaar

11/11/2016 14:04:28
Quote Anchor link
Top!

De <> is de tegenhanger van =.
Het betekent dus "is niet".
 
Jeroen Nick

Jeroen Nick

11/11/2016 14:11:23
Quote Anchor link
Oke dankje nu is het voor mij duidelijk!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.