Yadgar: JOIN-Problem, zweiter Teil

Beitrag lesen

High!

Nachdem ich durch Sven Rautenbergs Hilfe das JOIN-Problem bei der Tabelle "musiker_veroeffentlichung_instrument" lösen konnte (noch einmal danke für deinen Tipp!), stellt es sich jetzt in anderer Form noch einmal.

Es geht um die Tabelle "instrumentenmodelle" mit den Spalten ID, Hersteller, Modell, Instrument - "Hersteller" ist eine Primärschlüssel-Nummer (auto_increment) aus der Tabelle "instrumentenhersteller", "Modell" ist Klartext, "Instrument" wieder eine Primärschlüssel-Nummer (auto_increment) aus der Tabelle "instrumente".

Da die vorliegenden Rohdaten (Angaben zu Band-Besetzungen) längst nicht immer Hersteller und Modellname konkreter Instrumente (z. B. Hammond B3), sondern oft nur generische Instrumentenbezeichnungen (z. B. Orgel) oder sogar nur Bezeichnungen von Instrumentengruppen (z. B. Keyboards) enthalten, habe ich eine dreistufige Relationshierarchie eingerichtet: zunächst "instrumentengruppen" (ID, Bezeichnung), dann "instrumente" (ID, Instrument, Instrumentengruppe (ID aus "instrumentengruppen")), schließlich "instrumentenmodelle".

Da die Tabelle "musiker_veroeffentlichung_instrument" die Angaben für "Instrument" aus "instrumentenmodelle" bezieht, müssen in "instrumentenmodelle" auch die generischen Instrumentenbezeichnungen und sogar die Instrumentengruppenbezeichnungen stehen.

Jetzt möchte ich analog zu den bereits existierenden Tabellen eine Routine schreiben, die Eingaben per Formular auf bereits vorhandene identische Einträge prüft. Relevant sind dabei nur die Spalten "Hersteller" und "Modell"; geprüft wird sowohl auf mit der aktuellen Eingabe identische Einträge für "Hersteller" und "Modell" wie auch für den Fall, dass die Spalte "Hersteller" leer (=NULL) bleibt (also bei generischen Instrumentenbezeichnungen), auf identische Einträge für "Modell".

Konkret: wenn in der Tabelle bereits unter Hersteller "Hammond" und unter Modell "B3" steht und ich irrtümlicherweise noch einmal "Hammond" und "B3" eingebe, sollte eine Meldung "Eintrag mit diesen Daten existiert bereits! Bitte korrigieren Sie Ihre Eingabe!" angezeigt werden, nicht jedoch, wenn ich etwa "Bontempi" und "B3" eingebe, sehr wohl aber wiederum, wenn (bei leerem Eintrag für "Hersteller") ein zweites Mal "elektronische Orgel" unter "Modell" eingetragen werden soll.

Hier ist der bisherige Code:

  
    $query="SELECT instrumentenmodelle.Hersteller, instrumentenmodelle.Modell FROM instrumentenhersteller RIGHT OUTER JOIN instrumentenmodelle ON instrumentenhersteller.ID = instrumentenmodelle.Hersteller OR instrumentenmodelle.Hersteller = NULL";  
    $result=mysql_query($query);  
    dberror();  
    while ($row = mysql_fetch_row($result))  
    {  
      var_dump($row);  
      echo "<br>";  
      dberror();  
      if ($row[0]==$Hersteller && $row[1]==$Modell || $row[0]==NULL && $row[1]==$Modell)  
      {  
        echo "Ein Eintrag mit diesen Daten existiert bereits! Bitte korrigieren Sie Ihre Eingabe!<br>";  
        $doubledat=true;  
        break;  
      }  
    }  
  

So weit, so gut... nur wird aus einem mir unerklärlichen Grund die Bedingung des if-Blocks nie wahr!

var_dump($row) zeigt für $row[0] (also leere Spalte "Hersteller") seltsamerweise "0" und nicht "NULL" an!

Bis bald im Khyberspace!

Yadgar