JOIN-Problem mit 3 Tabellen

Admi

Erfahrenes Mitglied
Folgender Query holt die Daten aus 3 Tabellen und wirft diese auch aus.
Aus einem mir nicht ersichtlichen Grund wird aber ein Datensatz doppelt ausgeworfen und zwar der mit der ID=1?

Es wäre ja noch eine WHERE-Klausel möglich. Aber wie müsste die aussehen. Ich komm da auf keinen grünen Zweig.

PHP:
 $connection->datenbankQuery("
  SELECT 
    udb_udb.id,
    udb_udb.frb_nummer,
    udb_udb.nachname,
    udb_udb.vorname,
    udb_udb.mail,
    UNIX_TIMESTAMP(udb_udb.datetime) AS datetime,
    UNIX_TIMESTAMP(udb_udb.datetime2) AS datetime2,
    udb_udb.active,
    udb_user.notizen AS notizen2,
    udb_checkliste.bid AS bid2   
  FROM `udb_udb`
  LEFT JOIN `udb_user` ON udb_udb.id = udb_user.bid
  LEFT JOIN `udb_checkliste` ON udb_udb.id = udb_checkliste.bid
  ORDER by $filter $sort");
 
Das heißt, dass es in ubd_user oder in ubd_checkliste zwei Sätze mit bid = 1 gibt.

Um das weg zu kriegen kommt's drauf an, ob das ok ist (dass es mehrere User- oder Checklisten-Datensätze einem udb-Datensatz gibt). Wenn ja, dann könnte ein GROUP BY `udb_udb`.`id` helfen. Allerdings wäre dann noch das Problem, dass da wo es mehrere "Unter"-Datensätze gibt, irgendwie bestimmt werden muss, welcher nun ausgegeben werden soll.

Wenn es nicht gewollt ist, dass mehere User- oder Checklisten-Sätze einem einzigen udb-Satz zugeordnet werden können, dann würde ich raten, die Tabellen udb_user und udb_checkliste jeweils mit einem UNIQUE-Index auf das Feld `bid` zu versehen.
 
Zuletzt bearbeitet:
Das mit dem Group By scheint zu funktionieren.

Nun würde ich das ganze gerne noch mit einer kleinen Datenbanksuche ausstatten.

PHP:
$connection->datenbankQuery("
  SELECT 
    udb_udb.id,
    udb_udb.frb_nummer,
    udb_udb.nachname,
    udb_udb.vorname,
    udb_udb.mail,
    UNIX_TIMESTAMP(udb_udb.datetime) AS datetime,
    UNIX_TIMESTAMP(udb_udb.datetime2) AS datetime2,
    udb_udb.active,
    udb_user.notizen AS notizen2,
    udb_checkliste.bid AS bid2   
  FROM `udb_udb`
  WHERE udb_udb.nachname LIKE '%".$_REQUEST['name']."%'
  LEFT JOIN `udb_user` ON udb_udb.id = udb_user.bid
  LEFT JOIN `udb_checkliste` ON udb_udb.id = udb_checkliste.bid
  GROUP BY `udb_udb`.`id` 
  ORDER by $filter $sort");

Leider kommt dann nur der Fehlertext der mysql_error();-Funktion. Weiß jemand, wo da der Syntaxfehler liegen könnte. Vielleicht in der Anordnung? Der Requestwert ist ein normaler String der durch ein Formular übergeben wird.
 
Versuch es mal so
Code:
$connection->datenbankQuery(" 
  SELECT  
    udb_udb.id, 
    udb_udb.frb_nummer, 
    udb_udb.nachname, 
    udb_udb.vorname, 
    udb_udb.mail, 
    UNIX_TIMESTAMP(udb_udb.datetime) AS datetime, 
    UNIX_TIMESTAMP(udb_udb.datetime2) AS datetime2, 
    udb_udb.active, 
    udb_user.notizen AS notizen2, 
    udb_checkliste.bid AS bid2    
  FROM `udb_udb` 
 LEFT JOIN `udb_user` ON udb_udb.id = udb_user.bid 
  LEFT JOIN `udb_checkliste` ON udb_udb.id = udb_checkliste.bid 
 WHERE udb_udb.nachname LIKE '%".$_REQUEST['name']."%' 
  GROUP BY `udb_udb`.`id`  
  ORDER by $filter $sort");
 
Die Where-Klausel unters Join zu packen hilft leider auch nix. Immer noch SQL-Ausführungsfehler.
 
WAs sagt den mysql_error();? Da kommt doch immer eine Meldung von wegen Fehler in ... near..... check manuel. Poste die Fehlermeldung hier mal.
 
Mehr steht da nicht? Normalerweise kommt dann immernoch ein kleiner Auszug aus dem SQL-Statement welches in etwas die Position in dem Statement anzeigt wo der Fehler ist.
 
Die Position steht ja dabei :p -> line 17 near " ... Ob das " jetzt ein doppeltes Anführungszeichen oder 2 einfach Anführungszeichen sind, weiß ich aber auch nicht.

Edit: Im PHP-Forum geklärt :p
 
Zuletzt bearbeitet:
Zurück