(MySQL) Zwei Felder mit dem Auto-Increment-Wert füllen
Erik
- datenbank
0 Antje Hofmann0 Erik0 André Laugks0 Erik
0 Antje Hofmann0 Erik
0 Henryk Plötz
0 Thomas Meinike
Hi,
ist es möglich bei einer Insert-Operation ein weiteres Feld mit dem Wert des Auto-Increment Feldes zu belegen?
Beispiel
Auto-Increment-Spalte Sonstiges1 Sonstiges2
1 34 dfg
2 sdf nebb
3 sdsd foo
Und jetzt soll mit einem INSERT folgendes hinzugefügt werden:
4 4 bar
Mir ist klar, dass ich das ganze auch mit einer INSERT, einer SELECT und einer UPDATE-Operation erreichen kann, geht das aber nicht auch mit nur einem INSERT?
VG
Er"es lebe New Order"ik
Hallo Erik
ist es möglich bei einer Insert-Operation ein weiteres Feld mit dem Wert des Auto-Increment Feldes zu belegen?
Und jetzt soll mit einem INSERT folgendes hinzugefügt werden:
4 4 bar
Nein geht nicht, da die ID erst mit dem Insert vergeben wird und noch nicht existiert.
Aber warum so kompliziert? Definiere für das Feld einen Zustand z.B. -1 oder einfach leer lassen, der dann gesetzt wird, wenn die ID als Merkmal verwendet werden soll.
Mir ist klar, dass ich das ganze auch mit einer INSERT, einer SELECT und einer UPDATE-Operation erreichen kann, geht das aber nicht auch mit nur einem INSERT?
Den Select als Zwischenoperation kannst du dir sparen. Zumindest in PHP kannst du mit mysql_insert_id() die id ermitteln. Ansonsten geht auch update Tabellenname set Feldname=AnderesFeld where ...
Viele Grüße
Antje
Hi Antje,
ist es möglich bei einer Insert-Operation ein weiteres Feld mit dem Wert des Auto-Increment Feldes zu belegen?
Und jetzt soll mit einem INSERT folgendes hinzugefügt werden:
4 4 bar
Nein geht nicht, da die ID erst mit dem Insert vergeben wird und noch nicht existiert.
Aber warum so kompliziert? Definiere für das Feld einen Zustand z.B. -1 oder einfach leer lassen, der dann gesetzt wird, wenn die ID als Merkmal verwendet werden soll.
Es soll halt nach dem Feld "Sonstiges1" (wobei das Auto-Increment-Feld natürlich nicht immer gleich "Sonstiges1" ist) sortiert werden, deshalb funktioniert das wohl nicht.
Mir ist klar, dass ich das ganze auch mit einer INSERT, einer SELECT und einer UPDATE-Operation erreichen kann, geht das aber nicht auch mit nur einem INSERT?
Den Select als Zwischenoperation kannst du dir sparen. Zumindest in PHP kannst du mit mysql_insert_id() die id ermitteln. Ansonsten geht auch update Tabellenname set Feldname=AnderesFeld where ...
Hm, stimmt. Daran habe ich nicht gedacht. Aber besser wäre es trotzdem wenn ich das mit nur einer Operation erreichen könnte.
VG
Erik
Hallo!
Es soll halt nach dem Feld "Sonstiges1" (wobei das Auto-Increment-Feld natürlich nicht immer gleich "Sonstiges1" ist) sortiert werden, deshalb funktioniert das wohl nicht.
Wenn "Sonstiges1" nicht immer gleich mit der Spalte "Auto-Increment-Spalte" ist, kannst Du es nur über Deine Anwendung lösen.
Hm, stimmt. Daran habe ich nicht gedacht. Aber besser wäre es trotzdem wenn ich das mit nur einer Operation erreichen könnte.
Da die Zahlen/IDs nicht immer mit dem Auto-Increment übereinstimmen, kannst Du es nur über eine weitere oder so mehr Operationen lösen.
MfG, André Laugks
Hi,
Es soll halt nach dem Feld "Sonstiges1" (wobei das Auto-Increment-Feld natürlich nicht immer gleich "Sonstiges1" ist) sortiert werden, deshalb funktioniert das wohl nicht.
Wenn "Sonstiges1" nicht immer gleich mit der Spalte "Auto-Increment-Spalte" ist, kannst Du es nur über Deine Anwendung lösen.
Nein. Jetzt wurde ich wohl missverstanden. Bei der Operation die ich suche soll schon immer die Auto-Increment-Spalte = Sonstiges1 sein. Nur kann es eben auch sein, dass ich eine andere Operation ausführe, bei der dann die Auto-Increment-Spalte != Sonstiges1 ist.
Hm, stimmt. Daran habe ich nicht gedacht. Aber besser wäre es trotzdem wenn ich das mit nur einer Operation erreichen könnte.
Da die Zahlen/IDs nicht immer mit dem Auto-Increment übereinstimmen, kannst Du es nur über eine weitere oder so mehr Operationen lösen.
s.o.
VG
Erik
Hallo!
Nein. Jetzt wurde ich wohl missverstanden. Bei der Operation die ich suche soll schon immer die Auto-Increment-Spalte = Sonstiges1 sein. Nur kann es eben auch sein, dass ich eine andere Operation ausführe, bei der dann die Auto-Increment-Spalte != Sonstiges1 ist.
"Nur kann es eben auch sein,..."
Und das meine ich, wenn alle ID in der gleich Sonstiges1 sind, brauchst Du diese Spalte nicht. Dir bleibt nur der weg über eine weitere oder mehrere Operationen.
MfG, André Laugks
Hi Erik
Nein geht nicht, da die ID erst mit dem Insert vergeben wird und noch nicht existiert.
Aber warum so kompliziert? Definiere für das Feld einen Zustand z.B. -1 oder einfach leer lassen, der dann gesetzt wird, wenn die ID als Merkmal verwendet werden soll.
Warum nicht?
order by Sonstiges1,id
steht in sonstiges der gleiche Wert, wird nach id sortiert und kommt damit auf das gleiche raus.
Viele Grüße
Antje
Hi Antje,
Nein geht nicht, da die ID erst mit dem Insert vergeben wird und noch nicht existiert.
Aber warum so kompliziert? Definiere für das Feld einen Zustand z.B. -1 oder einfach leer lassen, der dann gesetzt wird, wenn die ID als Merkmal verwendet werden soll.
Warum nicht?
order by Sonstiges1,id
steht in sonstiges der gleiche Wert, wird nach id sortiert und kommt damit auf das gleiche raus.
Aber wenn in Sonstiges =-1 und ID meinetwegen =3 kommt es doch fälschlicherweise ganz an den Anfang, oder nicht?
VG
Erik
Hallo Erik,
order by Sonstiges1,id
steht in sonstiges der gleiche Wert, wird nach id sortiert und kommt damit auf das gleiche raus.
Aber wenn in Sonstiges =-1 und ID meinetwegen =3 kommt es doch fälschlicherweise ganz an den Anfang, oder nicht?
:-) nimm ein Sonderzeichen z.B. den Unterstrich dann steht's am Ende. Einfach ausprobieren.
Viele Grüße
Antje
Moin
Hm, stimmt. Daran habe ich nicht gedacht. Aber besser wäre es trotzdem wenn ich das mit nur einer Operation erreichen könnte.
Was hast du gegen:
INSERT blablabla;
UPDATE tabelle SET Sonstiges1 = Auto-Increment-Spalte WHERE Auto-Increment-Spalte = LAST_INSERT_ID();
--
Henryk Plötz
Grüße aus Berlin
Hi,
ist es möglich bei einer Insert-Operation ein weiteres Feld mit dem Wert des Auto-Increment Feldes zu belegen?
Beispiel
Auto-Increment-Spalte Sonstiges1 Sonstiges2
1 34 dfg
2 sdf nebb
3 sdsd foo
Und jetzt soll mit einem INSERT folgendes hinzugefügt werden:
4 4 bar
Der neue AUTO_INCREMENT-Wert ist LAST_INSERT_ID()+1, von daher so:
INSERT INTO tabelle (Sonstiges1,Sonstiges2) VALUES LAST_INSERT_ID()+1,'bar');
MfG, Thomas
INSERT INTO tabelle (Sonstiges1,Sonstiges2) VALUES LAST_INSERT_ID()+1,'bar');
Sorry, Klammer vergessen:
INSERT INTO tabelle (Sonstiges1,Sonstiges2) VALUES (LAST_INSERT_ID()+1,'bar');
MfG, Thomas