PHP MySQLi LEFT JOIN

lockcat

Erfahrenes Mitglied
Hallo liebe freunde von PHP,

auch ich habe mal wieder eine Anfänger frage, vllt bin ich grade einfach zu blöd zu, und zwar frage ich folgendes ab:

PHP:
$query = "SELECT
                fragen.id,
                fragen.frage,
                fragen.AnwortenIDs,
                fragen.Datum,
                antworten.id,
                antworten.FrageId,
                antworten.Antwort
            FROM
                fragen
                LEFT JOIN antworten ON fragen.id = antworten.FrageId
            ";
$res = mysqli_query($mysqli, $query) or die('-1'.mysqli_error());

Ich erhalte auch eine Ausgabe das ist nicht so das Problem sondern er gibt mir den Fragetext gleich vier mal aus. Ich verstehe auch warum, es liegen vier Antwortmöglichkeiten in der Datenbank.

Gibt es eine Lösung hier zu? oder ist es ein Falscher Ansatz? MySQLi ist nicht so meine stärke...


Hoffe man konnte mich verstehen,

lockcat
 
Das ist zwar eine SQL Frage und dadurch hier im PHP Forum falsch, aber das "Problem" ist das er mehrmals in die Tabellen Joint.

Wie soll dein gewünschtes Ergebnis aussehen?
1x die Frage und dazu alle Antworten die zu der Frage gehören oder mehrmals die Frage und die Antworten je 1x?
 
Oh Sorry, dann solle es vllt ggf. verschoben werden.

1x die Frage und dazu alle Antworten die zu der Frage gehören.

so war meine Idee.
 
Zuletzt bearbeitet:
Gut wenn es so gelöst werden soll, dann ist es doch eher eine PHP Frage.

PHP:
$query = "SELECT
                fragen.id,
                fragen.frage,
                fragen.AnwortenIDs,
                fragen.Datum,
                antworten.id as antwortId,
                antworten.FrageId,
                antworten.Antwort
            FROM
                fragen
                LEFT JOIN antworten ON fragen.id = antworten.FrageId
            GROUP BY antwortId
            ORDER BY fragen.id, antwortId;
            ";
$res = mysqli_query($mysqli, $query) or die('-1'.mysqli_error());

$OUT = array( );
$last_question_id = 0;
$answer_number = 1;
$i = -1;

while( $OBJ = mysqli_fetch_object( $res ) ) {
   if( $last_question_id != $OBJ ->FrageId  ) {
      $i++;
      $answer_number = 1;
      $last_question_id = $OBJ ->FrageId;
      $OUT[$i][FrageId] = $last_question_id;
      $OUT[$i]['Frage'] =$OBJ ->frage;
      $OUT[$i]['Frage'] =$OBJ ->frage;
   }

   $OUT[$i]['Antwort_Id_'.$answer_number] = $OBJ ->antwortId;
   $OUT[$i]['Antwort_Antwort_'.$answer_number] = $OBJ ->Antwort;

   $answer_number++;
}

Im Array $OUT hast du dann die Fragen und die dazu gehörigen Antworten.

Code ist nicht getestet müsste aber so Funktionieren.
 
Super dank dir für deine Zeit sitze aber nicht mehr am PC. Werde mich morgen mit einem Feedback melden.

Wünsche dir noch ein schönen abend :) & Danke nochmal,

Lg
 
Wäre es nicht so richtiger? Damit MySQLi auch weiß, aus welcher Tabelle zb. ID gelesen werden soll? zumindest bei einem ID-Feld solltest du den Namen ändern (SELECT fragen.id AS fragen_id o.ä.)

PHP:
$query = "SELECT
               fragen.id,
               fragen.frage,
               fragen.AnwortenIDs,
               fragen.Datum,
               antworten.id,
               antworten.FrageId,
               antworten.Antwort
           FROM
               fragen AS fragen
               LEFT JOIN antworten AS antworten ON fragen.id = antworten.FrageId
           ";
$res = mysqli_query($mysqli, $query) or die('-1'.mysqli_error());
 
Nein so erstellst du einen Alias mit der Bezeichnung "fragen" für die Tabelle fragen.

Das ist nicht wirklich nötig.
Tabellen können auch so angesprochen werden.

SQL:
   SELECT f.id,
                f.frage,
                f.AnwortenIDs,
                f.Datum,
                a.id,
                a.FrageId,
                a.Antwort
           FROM
               fragen AS f
               LEFT JOIN antworten AS a ON fragen.id = antworten.FrageId

Wenn man mit Alias arbeiten möchte wäre etwas in der Richtung möglich aber so wie du es geschrieben hast braucht man es nicht.
 
Super, hat so geklappt wie ich es mir vorgestellt hat :D
Dank dir nochmals, konnte auch echt noch was lernen...
lg
 
Das GROUP BY antwortId sollte noch aus der Query (in #4) raus. Oder erfüllt das einen Zweck? Da sind im PHP-Code auch noch ein, zwei kleinere Fehler, aber das sage ich nur der Vollständigkeit halber. :) War ja nur ein Umriss.
 
Raus muss es nicht unbedingt. In diesen Beispiel hat es nur kein Effekt und kann es auch raus gelassen werden.
 

Neue Beiträge

Zurück