MYSQL/PHP: Mehrere Werte anzeigen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • MYSQL/PHP: Mehrere Werte anzeigen

    Hi,
    in meiner Freizeit bastel ich ab und zu an meiner Online-Fußballsimulation. Mit der Zeit konnte ich kleinere Erweiterungen programmieren, hänge aber gerade ein wenig fest.

    Problem:
    Ich habe in meiner MySQL-DB eine Tabelle namens ws_verein. Dort sind alle Vereine aufgelistet.
    Nun hätte ich gerne erstmal eine Tabelle, in der alle Vereine aufgelistet sind (bekomme ich hin; per while ($zeile = mysqli_fetch_array( $db_erg, MYSQL_ASSOC))).

    Jetzt an dieser Stelle zwei Fragen/Probleme:
    a) SELECT nachname FROM ws_spieler where verein_id = 1070 order by w_staerke desc
    Wenn ich das in meiner .php nutze, spuckt er mir einen einzigen Wert aus. Wie kann ich zwei oder drei, am besten per Komma getrennt anzeigen?


    Quellcode

    1. $result = $db_link->query("SELECT nachname FROM ws_spieler where verein_id = 1070 order by w_staerke desc LIMIT 0 , 30");
    2. $row1 = $result->fetch_row();
    3. echo "<td>". $row1[0] . "</td>";
    b) Jetzt arbeite ich noch mit einer festen verein_id, die soll aber variabel sein. Aber wie?

    Grob sollte es so am Ende mal aussehen:


    NameBesten SpielerLetzte Transfers
    BayernHans, Peter, MarcMarie, Jojo, Uwe
    KölnAlex, Alexis, AlexanderPete, Jochen, Heiko
    DortmundHans, Peter, MarcHans, Peter, Marc



    Ich hoffe, dass überhaupt jemand mein Problem versteht. Gibt es ein Tutorial oder so für mich, was mir weiterhelfen könnte?
  • Die Spieler musst du wie die Vereine auch mit einer while-Schleife durchlaufen, sonst bekommst du natürlich immer nur den letzten (oder ersten).

    Die Verein-ID kannst du z.B. über einen GET-Parameter in der URL übergeben, diesen fängst ab und kannst ihn dann in deinen Query einbauen:

    PHP-Quellcode

    1. // http://url.de/statistik.php?verein=1070
    2. $vereinID = $_GET['verein']; // $_GET abfangen
    3. $vereinID = (int) htmlspecialchars($vereinID); // htmlspecialchars stellt sicher, dass kein ausführbarer Code in die Datenbank kommt und das (int) davor, stellt sicher, dass der Wert eine Zahl ist
    4. $db_link->query("SELECT nachname FROM ws_spieler where verein_id = " . $vereinID . " order by w_staerke desc LIMIT 0 , 30");
    Das ist sehr rudimentär und gerade die Validierung der Daten könnte man noch besser gestalten, aber zum erklären sollte das reichen.
    Hoffe ich konnte helfen.
  • Hi, das hilft mir schon mal total weiter. Danke!

    Gestern Nacht bin ich noch auf die Funktion "group_concat" gestoßen, die mir soweit sehr weiterhilft.

    Das ist mein Code:

    SQL-Abfrage

    1. SELECT SUBSTRING_INDEX( GROUP_CONCAT( nachname
    2. ORDER BY w_staerke DESC
    3. SEPARATOR ', ' ) , ',', 3 )
    4. FROM ws_spieler
    5. WHERE verein_id =1070
    6. LIMIT 0 , 30
    Der spuckt nun aus: Hans, Peter, Lisa (alles gut soweit)

    Nun gibt es allerdings in der Tabelle ws_spieler den Wert w_staerke, der in Klammer hinter dem Namen stehen soll.

    Also so: Hans (10), Peter (8), Lisa (12)
    Ich möchte also quasi innerhalb des group-concat's noch einen weiteren Select. Wie bekomme ich das am einfachsten hin?
  • Grundsätzlich kannst du das natürlich ebenfalls in den SQL-Query mit aufnehmen, ich würde aber empfehlen, nur die Daten abzufragen (auch ohne das GROUP_CONCAT) und das ganze mit PHP zu lösen, da solche Queries unglaublich rechenintensiv sind und "extrem" lange Antwortzeiten haben.
    Deswegen würde ich einfach die Daten roh auslesen ...

    PHP-Quellcode

    1. $db_link->query("SELECT nachname, w_staerke FROM ws_spieler WHERE verein_id = " . $vereinID . " ORDER BY w_staerke DESC LIMIT 0 , 30");
    ... und in der while-Schleife dann mit einem echo $row['nachname'] . ' (' . $row['w_staerke'] . '), '; ausgeben.

    Logik sollte niemals in der Datenbank implementiert werden ;)