PHPKram: mysql_insert_id()

Beitrag lesen

Servus,

danke ihr beiden! Ich glaube ich war gerade etwas zu blöd, um auf den weg mit MAX zu kommen. Genau das wollte ich. Ich nehme das einfach mit SELECT MAX(itemID) und füge stumpf danach +1 hinzu. Schon haben wir die jetzt zu verwendende ID für den nächsten Datensatz.

Hier schließt sich direkt eine weitere Frage von mir an zum Thema Datenbankstruktur (bin da noch nicht unbedingt so erfahren).

Ich habe wie bereits hier in dem Thema gemerkt das Feld itemID, das ich über die gesamte Datenbank verwende, um Datensätze eindeutig zu identifizieren. Ich habe 12 Tables, von denen eine über das Datum ist, eine über allgemeine Daten, eine über private Daten, eine über Attachments, eine über Metadata etc. Das heißt überall in den jeweiligen Tabellen gibt es die Spalte itemID, die die Daten der jeweiligen Tabellen Datenbankübergreifend miteinander in Relation setzt. Ich hoffe ihr habt den Aufbau ungefähr verstanden.

Was ist jetzt sinnvoll? Soll ich ganz am Anfang, wenn ein neuer Datensatz eingefügt werden soll einfach schonmal in jeder der Tabellen einen leeren Datensatz einfügen, damit überall schonmal itemID X eingetragen ist und ich dann nur noch mit Update drüber fahren muss, um die einzelnen Werte einzutragen oder wie soll ich das machen?

Ich habs bisher ungefähr so:

// Insert DateCreatedYear  
						if($Split[0] == "DateCreated" && $Split[1] == "Year") {  
      						$this->Connect->query("INSERT INTO itemdates (itemID,DateCreatedYear) VALUES ('$itemID','" . $Split[2] . "')");  
						}  
						// Insert DateCreatedMonth  
						elseif($Split[0] == "DateCreated" && $Split[1] == "Month") {  
      						$this->Connect->query("INSERT INTO itemdates (itemID,DateCreatedMonth) VALUES ('$itemID','" . $Split[2] . "')") or die($this->Connect->error);  
						}  
                              // Insert DateCreatedDay  
						elseif($Split[0] == "DateCreated" && $Split[1] == "Day") {  
      						$this->Connect->query("INSERT INTO itemdates (itemID,DateCreatedDay) VALUES ('$itemID','" . $Split[2] . "')");  
						}  
						// Insert DateCompletedYear  
						elseif($Split[0] == "DateCompleted" && $Split[1] == "Day") {  
      						$this->Connect->query("INSERT INTO itemdates (itemID,DateCompletedYear) VALUES ('$itemID','" . $Split[2] . "')");  
						}

Klar funktioniert der Code so wie er da steht nicht ganz - das merke ich auch gerade. Mein Problem ist nur, dass ich a) nicht weiß ob alle Daten des Datensatzes angegeben sind und b) wenn nein welche denn nun angegeben sind. Deswegen muss ich immer mit if überprüfen, welche Daten angegeben sind, um sie in die Datenbank zu schreiben. Wenn dieser Datensatz dann vorhanden ist, soll er natürlich auch in die Datenbank geschrieben werden. Also:

Erst nen leeren Datensatz in die jeweiligen Tabellen schreiben, damit itemID mit dem aktuellen Wert schon innerhalb der Tabellen vorhanden ist und dann mit einem UPDATE ... WHERE itemID = '$CurrentItemID' drüber gehen?

Gibt es hier andere Ansätze?

Vielen Dank.