Erik: (MySQL) Zwei Felder mit dem Auto-Increment-Wert füllen

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

  1. 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

    1. 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

      1. 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

        1. 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

          1. 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

      2. 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

        1. 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

          1. 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

      3. 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

  2. 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

    1. 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