falsches INSERT Statement

Hallo Harald,

Code:
warum willst du unbedingt eine kompliziertes Statement schreiben?
Das ist ganz einfach.
Die Informationen die in der Tabelle stehen kommen aus einem Formular.
Damit nun nicht bei jedem
Code:
INSERT INTO `Zip` (`Zip`, `City`)
VALUES ('12345', 'stadt')
den selben Wert wieder und wieder in die Tabelle schmiere, schaue ich nach ob der Ort mit PLZ schon vorhanden ist und wenn ja trage ich den Primary Key als Fremdschlüssel in die
Tabelle mit den restlichen Daten

ungefähr so:
Code:
// schauen ob die PLZ mit Ort schon vorhanden
		$sql = 'insert into zip (zip ,city) '
        . ' select distinct \''.$FormZip.'\', \''.$FormCity.'\''
				. ' from zip'
				. ' where not exists (select zip, city'
				. ' from zip'
				. ' where zip =\''.$FormZip.'\''
				. ' and city = \''.$FormCity.'\')';	
		$result = mysql_query($sql);

//eintragen der restlichen Daten in die zweite Tabelle	
		$sql = 'INSERT INTO `table` (
              `table`.`Name`,
              `table`.`Street`,
              `table`.`Number`,
              `table`.`URL`,
              `table`.`StatusID`,
              `table`.`CountryID`,
              `table`.`ZipID`)'
				. ' SELECT 
              \''.$FormName'\',
              \''.$FormStreet.'\',
              \''.$FormNumber.'\', 
              \''.$FormURL.'\', 
              `Status`.`ID`, 
              `Countries`.`ID`, 
              `Zip`.`ID`'
				. ' FROM `Status`, `Countries`, `Zip`'
				. ' WHERE `Status`.`Value` = \''.$FormStatus.'\''
				. ' AND `Countries`.`Name` = \''.$FormCountry.'\''
				. ' AND `Zip`.`Zip` = \''.$inputFormZip.'\''
				. ' AND `Zip`.`City` = \''.$FormCity.'\'';
		$result = mysql_query($sql);

Das einzige Problem an der Vorgehensweise ist, dass dabei eine Mikrosekunde zeit
bleibt den ersten Eintrag wieder zu löschen.
Naja da muss ich mir nochwas überlegen.

Wenn du natürlich einen Vorschlag hast wie ich noch besser Formulardaten auswerten, validieren und in DBs eintragen kann habe ich immer ein offenes Ohr.
Ich bin hier nämlich mit meiner Lösung noch nicht ganz zufrieden.
 
Zuletzt bearbeitet:
Was ich auch noch machen könnte und das ist sicher der bessere Weg, ist beide Werte
zusammen als UNIQUE zu indizieren. Damit habe ich die Kontrolle bei der Datenbank und die Fehlermeldung bei der Eingabe kann ich unterdrücken.
 

Neue Beiträge

Zurück