PHP Wiedergabe von Bestenliste

  • Hallo,


    ich würde gerne eine Bestenliste erstellen. Pro Aktion die durchgeführt wird, wird ein neuer Eintrag erstellt.

    Nun ist meine Frage, wie kriege ich dass hin die Besten 3 anzeigen zu lassen ? Der Benutzer wird bei einen neuen Eintrag mit der AccountID versehen.


    Also wir haben bspw folgende Tabelle


    ID, BenutzerID, Zeit


    Wir nehmen also mal an wir haben folgende Einträge


    1, 1, 1609583740

    2, 1, 1609583740

    3, 1, 1609583740

    4, 1, 1609583740

    5, 1, 1609583740

    6, 3, 1609583740

    7, 3, 1609583740

    8, 3, 1609583740

    9, 2, 1609583740


    Platz 1 wäre in dem Fall der Benutzer mit der BenutzerID 1. Den zweiten Platz belegt die BenutzerID 3 und den Dritten die BenutzerID 2.


    Wie kann man dass ganze in SQL umsetzen ? Es können natürlich noch andere BenutzerIDs geben.

    • Offizieller Beitrag

    Wie kann man dass ganze in SQL umsetzen ?

    Für sowas kannst du meiner Meinung nach gut GROUP BY (Gruppiert) in Verbindung mit einem ORDER BY (Sortiert) bzw. einem COUNT (Zählt) verwenden


    SQL
    SELECT `BenutzerID`, COUNT(`Zeit`) AS 'zeit' FROM `DATENBANKNAME` GROUP BY `BenutzerID` ORDER BY 'zeit'

    Als Ausgabe würdest du denn das hier bekommen (hoffe habe es richtig verstanden):

    pasted-from-clipboard.png

  • Hallo und danke für eure Hilfe. Ich weiß jetzt nich ob ich es falsch gemacht habe oder ich mich falsch ausgedrückt habe.


    Aktuell habe ich es wie folgt


    Mir werden allerdings nun nur die IDs angezeigt und nicht die meisten Werte mit einer BenutzerID ("von")


    Der Print_r gibt folgendes aus


    Code
    Array ( [von] => 14 [0] => 14 ) Array ( [von] => 15 [0] => 15 ) Array ( [von] => 16 [0] => 16 ) 


    Die Datenbank Struktur


    pasted-from-clipboard.png

  • Beitrag von IPrototypeI ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: falsch verstanden ().
  • SELECT von, Count(von) as `anzahl` FROM `punkte` GROUP BY `von` ORDER BY `anzahl` DESC LIMIT 3


    Dann bekommst du die Anzahl an einträgen wie Whice es oben geschrieben hat, ich bin davon ausgegangen du wolltest nur die zeit als referenz haben.

  • SELECT von, Count(von) as `anzahl` FROM `punkte` GROUP BY `von` ORDER BY `anzahl` DESC LIMIT 3


    Dann bekommst du die Anzahl an einträgen wie Whice es oben geschrieben hat, ich bin davon ausgegangen du wolltest nur die zeit als referenz haben.

    Super dass passt. Kann ich noch irgendwie anzeigen lassen wie viele Einträge gefunden wurden ? also die as Anzahl? Für die einzelnen BenutzerIDs

  • Dafür hat PHP die Funktion rowCount


    https://www.php.net/manual/de/pdostatement.rowcount.php


    In deinem Fall also

    PHP
    $query_playtime->rowCount();

    Sollte aber auch in Verbindung mit dem hier funktionieren



    SELECT von, Count(von) as `anzahl` FROM `punkte` GROUP BY `von` ORDER BY `anzahl` DESC LIMIT 3


    Dann bekommst du die Anzahl an einträgen wie Whice es oben geschrieben hat, ich bin davon ausgegangen du wolltest nur die zeit als referenz haben.


    Und wenn ich dass ganze ersetze fällt die Abfrage hin.

  • Das funktioniert auch mit dem SQL Befehl. Schau dir die verlinkte Seite an! Wenn du jetzt willst, dass ich dir einen fertigen Code poste, den du nur kopieren musst, bist du bei mir falsch.


    Grundlagen sollten man schon beherrschen.


    Edit:

    ERSTES BEISPIEL AUS DEM MANUAL

    PHP
    <?php
    /* Delete all rows from the FRUIT table */
    $del = $dbh->prepare('DELETE FROM fruit');
    $del->execute();
    
    /* Return number of rows that were deleted */
    print("Return number of rows that were deleted:\n");
    $count = $del->rowCount();
    print("Deleted $count rows.\n");
    ?>
  • So, habe es nun zu der Ausgabe geschafft. Aber da zeigt er mir ja lediglich an wie viele Einträge insgesamt für alle Benutzer gefunden wurden. Mein Ziel war es gewesen nur die Werte für die einzelnen Benutzer zu ermitteln.

  • Beitrag von Habub47 ()

    Dieser Beitrag wurde vom Autor gelöscht ().