Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Left Join 3 Tabellen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Left Join 3 Tabellen

    Hallo allerseits,

    ich bin php/mysql-Anfänger und versuche mich gerade daran, Schritt für Schritt eine Bundesliga-Tipprunde für meinen privaten Freundeskreis zu erstellen.

    Damit die jeweiligen Tipps abgegeben werden können, lese ich den Spieltag mit seinen Paarungen aus. Dazu kann dann jeweils über Formularfelder der Tipp eingegeben werden.
    Dafür habe ich 2 Tabellen.

    In der Tabelle "spiel" finden sich die einzelnen Paarungen. Aufbau:
    `id`, `spieltag`, `spiel_id`, `datum`, `heimverein_id`, `gastverein_id`, `heimtore`, `gasttore`, `liga`, `eintragender`

    Über Left Join lasse ich die Tabelle "verein" joinen. Aufbau:
    `id`, `liga_id`, `verein`, `kurz`

    Code:
    $sql = "SELECT s.spieltag, s.spiel_id, DATE_FORMAT(s.datum, \"%d.%m.%Y - %H:%i\") AS datum, heimverein.verein AS heim, gastverein.verein AS gast, s.heimverein_id, s.gastverein_id
                    FROM spiel s
                    LEFT JOIN verein AS heimverein ON (heimverein.id = s.heimverein_id)
                    LEFT JOIN verein AS gastverein ON (gastverein.id = s.gastverein_id)
                    WHERE spieltag = 1           
                    ORDER BY s.spiel_id";
    Soweit funktioniert auch alles bestens.

    Nun möchte ich aber, dass in den Formularfeldern auch die Tipps erscheinen, die der Tipper gespeichert hat. Z.B. falls er einen Tag später diese noch einmal verändern möchte.
    Das möchte ich über value verwirklichen, leider komme ich aber bei der mysql-Abfrage nicht weiter.

    Ich habe also eine dritte Tabelle "tippabgabe" in der die Tipps gespeichert werden. Aufbau:
    `id`, `liga`, `spieltag`, `spiel_id`, `heimtore`, `gasttore`, `punkte_spiel`, `benutzer`

    Meine Idee ist nun, diese Heimtore und Gasttore des Tippers in den Formularfeldern erscheinen zu lassen.

    Dazu hab ich folgendes versucht:
    Code:
    $sql = "SELECT s.spieltag, s.spiel_id, DATE_FORMAT(s.datum, \"%d.%m.%Y - %H:%i\") AS datum, heimverein.verein AS heim, gastverein.verein AS gast, s.heimverein_id, s.gastverein_id, t.heimtore, t.gasttore, t.benutzer
                    FROM spiel s
                    LEFT JOIN verein AS heimverein ON (heimverein.id = s.heimverein_id)
                    LEFT JOIN verein AS gastverein ON (gastverein.id = s.gastverein_id)
                    LEFT JOIN tippabgabe t ON (t.spiel_id = s.spiel_id)
                    WHERE spieltag = 1 AND benutzer='$benutzer'          
                    ORDER BY s.spiel_id";
    Das liefert mir aber "Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given ..."

    Da ich trotz hin und her probieren mit Hilfe der Grundlagen und des Forums nicht so recht weiter kommen mag, wende ich mich nun an euch


  • #2
    http://www.php.de/wiki-php/index.php/Debugging:SQL

    Kommentar


    • #3
      vllt. weil `spieltag` nun in 2 tbl's existiert? was liefert mysql_error()?

      Kommentar


      • #4
        Glaskugel polier.... mysqli_query() ist nur blass bis verschwommen bis garnicht zu sehen...
        PHP-Code:
        if ($var != 0) {
          
        $var 0;

        Kommentar


        • #5
          ja ich nehme an, weil er $sql dann indn query packt... siehe "Soweit funktioniert auch alles bestens."

          Kommentar


          • #6
            sauber

            Hi,

            danke für den Link und die Antworten! mysqli_error meinte, dass "spieltag ambiguous" sei. Daraufhin habe ich den Fehler behoben und nun klappt alles.

            Habe es nun wie folgt gemacht:
            Code:
                    $sql = "SELECT s.spieltag, s.spiel_id, DATE_FORMAT(s.datum, \"%d.%m.%Y - %H:%i\") AS datum, heimverein.verein AS heim, gastverein.verein AS gast, s.heimverein_id, s.gastverein_id, t.heimtore, t.gasttore, t.benutzer
                            FROM spiel s
                            LEFT JOIN verein AS heimverein ON (heimverein.id = s.heimverein_id)
                            LEFT JOIN verein AS gastverein ON (gastverein.id = s.gastverein_id)
                            LEFT JOIN tippabgabe t ON (t.spieltag = s.spieltag AND t.spiel_id = s.spiel_id AND t.benutzer = '$benutzer')
                            WHERE s.spieltag = 1
                            ORDER BY s.spiel_id";
            
            	$abfrage = mysqli_query($verbindung, $sql);
            	if (false === mysqli_query ($verbindung, $sql))
                       {
                       echo 'Fehler: '; die (mysqli_error ($verbindung));
                    }
            
                    while ($row = mysqli_fetch_array($abfrage)){
                        echo "<tr>
                                <td><p class=\"black\">$row[spiel_id]</p></td>
                                <td><p class=\"black\">$row[datum] Uhr</td>
                                <td><p class=\"black\">$row[heim]</td>
                                <td><p class=\"black\">-</td>
                                <td><p class=\"black\">$row[gast]</td>
                                <td><p class=\"black\">
                                <input type=\"text\" size=\"2\" maxlength=\"2\" name=\"tore_heim$row[spiel_id]\" value=\"$row[heimtore]\">
                                :
                                <input type=\"text\" size=\"2\" maxlength=\"2\" name=\"tore_gast$row[spiel_id]\" value=\"$row[gasttore]\">
                                </p></td>
                              </tr>";
                    }
            Jetzt wird der Spieltag angezeigt mit den Formularfeldern, wo die gespeicherten Tipps des eingeloggten Tippers erscheinen

            Kommentar

            Lädt...
            X