Tach!
Ich mache sowas mit zwei Joins, und zur Unterscheidung nehme ich Table Aliase.
SELECT s.bereich_name as Sender, e.bereich_name as Empfaenger FROM todo_grunddaten g LEFT JOIN todo_bereich s ON g.bereichSender = s.tb_code LEFT JOIN todo_bereich e ON g.bereichEmpfaenger = e.tb_code
verstehe ich ehrlich gesagt nicht so recht. Woher kommen z.B. diese "s.bereich_name as Sender, e.bereich_name as Empfaenger" Werte? Ich habe es mal in meine Funktion eingesetzt
s und e und auch g sind die erwähnten Aliase zu den davorstehenden Tabellennamen. Man nimmt solche Aliase, um beim mehrfachen Verknüpfen derselben Tabelle zu unterscheiden, welche der beiden Vorkommen man meint. Oder wie im Falle von g, weil man sich damit kürzer auf eine Tabelle beziehen kann.
$stmt = $mysqli->prepare("SELECT id, code, kurzbeschreibung, art, erstellungsdatum, job, bereichSender, apSender, bereichEmpfaenger, apEmpfaenger, prio, status, fertigstellung_sender, fertigstellung_uhrzeit_sender, fertigstellung_empfaenger, fertigstellung_uhrzeit_empfaenger, beschreibung, ta_titel, tp_titel, ts_titel, tb_titelkurz, s.bereich_name as Sender, e.bereich_name as Empfaenger FROM todo_grunddaten LEFT JOIN todo_art ON todo_art.ta_code = todo_grunddaten.art LEFT JOIN todo_prio ON todo_prio.tp_code = todo_grunddaten.prio LEFT JOIN todo_status ON todo_status.ts_code = todo_grunddaten.status LEFT JOIN todo_bereich s ON g.bereichSender = s.tb_code LEFT JOIN todo_bereich e ON g.bereichEmpfaenger = e.tb_code");
Hilfe! Weißt du auswendig, welche Spaltennamen im SELECT zu welcher Tabelle gehören? Bist du dir sicher, dass du das in Zukunft auch noch weißt, wenn du dich mal eine Weile lang nicht mehr damit beschäftig hast? Bei solchen Monster-Joins nimm lieber Aliase oder Tabellenamen zu den Feldern, damit die Herkunft klar ist. Ich würde auch lieber die Subquerys empfehlen, weil "übersichtlich" anders geht als mit Joins.
Allerdings erhalte ich dann eine Fehlermeldung
Fatal error: Call to a member function execute() on boolean in
$stmt ist dann wohl nicht das Statement-Objekt sondern ein boolean. Warum? Schau da, wo es zugewiesen wurde. So ein Prepare gibt im Fehlerfall nicht das Statement sondern einen booleaschen Wert zurück. Wenn man diese Möglichkeit nicht abfängt, gibts dann solche Folgefehler. Die eigentliche Ursache wird sein, dass das Statement fehlerhaft ist und nicht präpariert werden konnte. Die genaue Meldung gibts in $mysqli->error
.
dedlfix.