Yadgar: JOIN-Problem, zweiter Teil

Beitrag lesen

High!

<Ingrid>

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

</Ingrid>

Das kann ja auch gar nicht anders sein, wenn ich in der MySQL-Query Primärschlüsselnummern aus "instrumentenhersteller" abfrage, im Formular aber Klarnamen (instrumentenhersteller.Name) eingegeben werde!

Also habe ich die Query geändert:

  
SELECT instrumentenhersteller.Name, instrumentenmodelle.Modell FROM instrumentenhersteller RIGHT OUTER JOIN instrumentenmodelle ON instrumentenhersteller.ID = instrumentenmodelle.Hersteller OR instrumentenmodelle.Hersteller = 0;  

So werden schon einmal Doppeleingaben von Hersteller (!=NULL) und Modell richtig erkannt, leider keine Doppeleingaben von Modell bei Hersteller=NULL... stattdessen passiert bei Eingabe von z. B. "elektronische Orgel" ohne Hersteller etwas noch Seltsameres: var_dump($row) zeigt "elektronische Orgel" in allen Kombinationen mit den bereits vorhandenen Herstellern (gegenwärtig drei, nämlich Hammond, Yamaha und Korg) an! Stimmt womöglich etwas mit den INSERT-Sequenzen nicht und werden gleich drei Datensätze auf einmal in "instrumentenmodelle" eingetragen?!?

Hier noch mal der Gesamt-Code mit INSERT-Sequenzen:

  
    $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;  
      }  
    }					  
    if (!$doubledat)  
    {  
      $query= "SELECT ID FROM instrumentenhersteller WHERE Name='".mysql_real_escape_string($Hersteller)."'";  
      $result = mysql_query($query);  
      dberror();  
      $row = mysql_fetch_row($result); // nur 1 Ergebniszeile!  
      $ids[0]=$row[0];  
      $query = "SELECT ID FROM instrumente WHERE Bezeichnung = '".mysql_real_escape_string($Instrument)."'";  
      $result = mysql_query($query);  
      dberror();  
      $row = mysql_fetch_row($result); // nur 1 Ergebniszeile!  
      $ids[1]=$row[0];  
      $query = "INSERT INTO instrumentenmodelle (Hersteller, Modell, Typ) VALUES ('".mysql_real_escape_string($ids[0])."','".mysql_real_escape_string($Modell)."','".mysql_real_escape_string($ids[1])."')";  
      $result = mysql_query($query);  
      dberror();  
      echo "Ihre Eingabe war korrekt und wurde in die Datenbank eingetragen!";  
    }  

Wieso wird die INSERT-Query unter bestimmten Bedingungen (nämlich $row[0]=NULL (oder meinetwegen $row[0]=0, PHPMyAdmin, mit dem ich die Ausgaben teste, lässt einen da ja leider konsequent im Unklaren) mehr als einmal ausgeführt? Da ist doch gar keine Schleife!

Und jetzt, wo ich mir gerade per PHPMyAdmin den Inhalt von "instrumentenmodelle" anzeigen lasse, stelle ich fest, dass die Eingabesequenz wohl doch korrekt funktioniert, jedenfalls steht "elektronische Orgel" dort nur in Kombination mit Hersteller=0 und nicht etwa mit allen gegenwärtig vorhandenen (Hammond, Yamaha, Korg) Herstellern... allerdings nach wie vor doppelt, weil die Fehlererkennung für Hersteller=0 (oder NULL? Ich blicke langsam überhaupt nicht mehr durch!!!) noch nicht funktioniert...

Also muss wohl die Query am Beginn des Codeausschnittes noch nicht ganz in Ordnung sein... vielleicht sollte ich dort "= 0" doch durch "= NULL" ersetzen...

...und, bingo!, es funktioniert! Mir fällt ein Asteroid vom Herzen!

Darauf eine Pringles- und Erdnussflips-Dröhnung von der 24/7-Junkstelle... oder lieber doch nicht, ich will schließlich irgendwann in diesem Jahrhundert noch mit dem Fahrrad nach Afghanistan, da ist ein BMI nahe 40 ein echter Showstopper!

Bis bald im Khyberspace!

Yadgar