List:German« Previous MessageNext Message »
From:Musa Date:November 7 2009 5:58pm
Subject:insert in insert
View as plain text  
hallo liste,

tabelle sprachen hat die spalten "id", "en" und "de". wobei spalte id den primär
schlüssel beinhaltet und auf auto increment gesetzt ist.
tabelle laender hat die spalten "id", "sprachid", und "landvorwahl". spalte id ist
primär, spalte sprachid ist fremdschlüssel.

(die obigen tabellen sind nur beispiele, in echt sehen die tabellen anders aus (falls ihr
keinen sinn dahinter sieht). einfachheitshalber habe ich die tabellen hier
abgeändert.)

programmierung erfolgt in php.

daten werden in html-formular eingegeben:

englisch: Germany
deutsch: Deutschland
landvorwahl: 0049

die eingegebenen daten sind voneinander ahängig und kommen nicht in die selbe
tabelle.

IST:

mysql_query("INSERT INTO sprachen (en, de) VALUES ('Germany', 'Deutschland')");
$id = mysql_query("SELECT MAX(id) FROM sprachen");
$datensatz = mysql_fetch_assoc($id);
mysql_query("INSERT INTO laender (sprachid, landvorwahl) VALUES ('".$datensatz."',
'0049')");

IST erklärung:

in die tabelle sprachen wird ein neuer datensatz hinzugefügt.
die id des zuletzt hinzugefügten datensatzes aus tabelle sprachen wird ermittelt (da
auto increment, ist dies der höchste wert),
und in eine variable eingelesen.
in die tabelle laender wird ein neuer datensatz hinzugefügt, wobei dieser als
fremdschlüssel einen id wert aus der tabelle sprachen erhält.

DAS PROBLEM / MEINE FRAGE:

wenn sagen wir mal 20 personen (oder mehr) gleichzeitg daten einplfegen, kann in dem
obigen beispiel (IST) vielleicht zu fehlern kommen, da zwischen einfügen in die
erste tabelle und auslesen des id's schon der nächste datensatz eingefügt
worden sein könnte. so das die ausgelesene id schon vom nächsten datensatz ist
und die fremdschlüssel die in die zweite tabelle eingetragen wird einen falschen
wert hat und somit die spätere ausgabe nicht korrekt ist.

wie kann ich das problem umgehen, so dass ich auf jedenfall die richtige id bekomme, auch
wenn in der zwischenzeit ein neuer datensatz hinzugefügt wurde. das gleiche problem
habe ich auch bei drei tabellen, wo die id der ersten tabelle als fremdschlüssel in
die zweite tabelle und die id aus der zweiten tabelle als fremdschlüssel in die
dritte tabelle soll. ich denke das meine methode fehleranfällig ist und zu viele
mysql anfragen erfordert.

ich würde mich sehr über eine lösung freuen.

schönen gruß aus hamm
musa


--------------------------------------------------------------------------------




Thread
insert in insertMusa7 Nov
  • Re: insert in insertChristopher Gerharz7 Nov