Frage zu JOIN

  • Ihr habt mir ja hier schon ein paar Mal gut geholfen ;) – hab mal wieder ein Problem:


    Ich hab zwei Tabellen


    tx_mygbs_seriennummer
    tx_mygbs_gereat


    Der Benutzer kann also eine Seriennummer eingeben und es wird der passende Gerätetyp aus der Tabelle tx_mygbs_gereat hinzugefügt und dann angezeigt
    Ich hab das über ein JOIN gemacht:


    $res=$GLOBALS['TYPO3_DB']->exec_SELECTquery(
    'a1.uid, a1.crdate, a1.typ, a1.benutzer, a1.seriennummer, a1.nick, a1.license, a1.code, a2.title',
    'tx_mygbs_seriennummer a1 JOIN tx_mygbs_gereat a2 ON a2.uid = a1.typ',
    'a1.hidden=0 and a1.deleted=0 and a2.hidden=0 and a2.deleted=0 and a1.benutzer = '.$user, #where
    $groupBy='',
    $orderBy= 'typ',
    $limit='');


    funktioniert auch aber da es jetzt anscheinend ein paar Gerätetypen gibt die nicht in der tx_mygbs_gereat aufgeführt sind werden diesen Seriennummern nicht angezeigt. Kann ich das irgendwie umgehen?
    Danke

  • Zitat

    Kann ich das irgendwie umgehen?


    Dein JOIN liefert nur Werte, die in beiden Tabellen vorkommen und zwar verbunden über das "ON". Wenn Du nun nicht "JOIN", sondern "LEFT JOIN" oder "RIGHT JOIN" nimmst, jenachdem, was Du brauchst, dann kommen auch die Werte, die in der zweiten gejointen Tabelle nicht vorkommen. Die haben dann in den SELECT-Feldern jeweils den Wert "NULL".


    Ein LEFT JOIN sollte daher dann bei allen Seriennummern die entsprechenden Werte der "a1" bringen und bei den "a2" (da Gerät nicht vorhanden) jeweils "NULL".


    Soviel erst mal zum Join selbst. Aufpassen musst Du aber, da Du in Deiner Where-Bedingung ja auch auf a2 zugreifst bzw. eben Bedingungen daran stellst. a2 gibt es aber nicht, wenn das Gerät nicht vorhanden ist.

  • ich dank dir Synonym


    aber wenn ich das jetzt in ein LEFT JOIN ändere hab ich ja noch die Bedinung ON a2.uid = a1.typ die ja nicht erfüllt werden kann, was mach ich hier? grrr


    tx_mygbs_seriennummer a1 LEFT JOIN tx_mygbs_gereat a2 ON a2.uid = a1.typ

  • Da machst Du nichts. Das ist die Bedingung zur Verknüpfung der Tabellen. Wenn es die gibt, dann passt alles (bei JOIN). Bei "LEFT JOIN" ist es ebenfalls die Verknüpfung, aber eben nicht mehr zwingend. Wenn sie nicht da ist, da Gerät nicht vorhanden, wird NULL zurückgegeben. Die Daten aus der SELECT-Tabelle werden dann abgerufen, aus der "LEFT JOIN" gibt es dann keine (NULL).