Deus Figendi: /SQL: In Insert auf gerade eingefügte ID Bezug nehmen

Guten Morgen,
mein Problem ist wahrscheinlich trivial, aber ich bin nicht so firm in SQL...
Also ich habe eine Tabelle, in der ich quasi zwei IDs pflege, die eine ist unique, wie es sich gehört und die andere repräsentiert "Gruppen" von Einträgen, eine Refferenz. Genauer gesagt ist es eine Übersetzung. Etwa so:
id | Wert | ref
 0 | Wert |  0
 1 | Value|  0
 2 | Brett|  2
 2 | Board|  2
Ursprünglich hatte ich vorgesehen, dass die Referenzen der Einträge auf die refferenziert wird einfach "0" sind um zu zeigen, dass sie selbst die Refferenz sind. Es hat sich aber programmiertechnisch heraus gestellt, dass es einfacher ist, wenn sie tatsächlich auf sich selbst verweisen, wie oben dargestellt.
Die Frage ist: Wie schreibe ich ein INSERT, welches genau das realisiert.
Mein Versuch sah so aus:

INSERT INTO `db`.`tabelle` (  
`id` ,  
`Wert` ,  
`ref` ,  
)  
VALUES (  
NULL , 'TVALUE', tid  
);
~~~ hat nicht geklappt, hat "0" bei ref eingetragen, nächster Versuch mit Backticks:~~~sql
[code lang=sql]INSERT INTO `db`.`tabelle` (  
`id` ,  
`Wert` ,  
`ref` ,  
)  
VALUES (  
NULL , 'TVALUE', `tid`  
);
~~~[/code]Gleiches Ergebnis.  
  
Jetzt weiß ich leider kein passendes Stichwort, nach dem ich in der Dokumentation suchen könnte oder so... kann mir das jemand geben?  
Ich will also - wie oben zu sehen - in einem INSERT einem Feld den Wert der auto\_increament-id geben, die gerade im Moment angelegt wird (oder justemente wurde).  
Worst Case würde ich das aber auch mit einem Update-query lösen...

-- 
sh:( fo:| ch:? rl:( br:& n4:& ie:{ mo:} va:) de:µ\_de:] zu:) fl:( ss:| ls:[ js:(
  1. Hallo Deus,

    Jetzt weiß ich leider kein passendes Stichwort, nach dem ich in der Dokumentation suchen könnte oder so... kann mir das jemand geben?
    Ich will also - wie oben zu sehen - in einem INSERT einem Feld den Wert der auto_increament-id geben, die gerade im Moment angelegt wird (oder justemente wurde).

    Jetzt weiß ich nicht, ob ich es genau verstanden habe, aber in mysql gibt es folgende Funktion: LAST_INSERT_ID() Hilft dir die?

    ciao
    romy

    1. Hallo Deus,

      Hallo

      Jetzt weiß ich nicht, ob ich es genau verstanden habe, aber in mysql gibt es folgende Funktion: LAST_INSERT_ID() Hilft dir die?

      Nee, die hilft nicht, was ich bräuchte ist THIS_INSERT_ID()
      Aber danke :)

      --
      sh:( fo:| ch:? rl:( br:& n4:& ie:{ mo:} va:) de:µ_de:] zu:) fl:( ss:| ls:[ js:(
  2. Hallo,

    id | Wert | ref
    0 | Wert |  0
    1 | Value|  0
    2 | Brett|  2
    2 | Board|  2

    Diese Stuktur halte ich für überdenkenswert; warum nicht 2 Tabellen: eine mit den deutschen Wörtern, die zweite mit der/den Übersetzung(en), der Sprache und dem Bezug zur ID aus Tabelle eins?
    Das ganze kann dann über ein JOIN abgefragt werden.

    tabelle 1
    id | Wert
    1 | Wert
    2 | Brett

    tabelle 2
    id | ref_id | sprache | wert
    1 | 1 | en | value
    2 | 2 | en | board
    3 | 1 | fr | weiss ich leider nicht..

    Grüße Basti

    1. Hallo

      Diese Stuktur halte ich für überdenkenswert; warum nicht 2 Tabellen: eine mit den deutschen Wörtern, die zweite mit der/den Übersetzung(en), der Sprache und dem Bezug zur ID aus Tabelle eins?

      Ja, sowas hatte ich auch mal überlegt, aber denk mal 1,5 Schritte weiter... die tatsächliche ID der Referenz spielt überhaupt keine Rolle, ebenso könnte die 2-Tabellen-Struktur auch so aussehen:

      tabelle 1 (eher Liste ^^)
       id
        1
        2

      tabelle 2
       id | ref_id | sprache | wert
        1 |   1    |   en    | value
        2 |   2    |   en    | board
        3 |   1    |   fr    | weiss ich leider nicht..
        4 |   1    |   de    | Wert
        5 |   2    |   de    | Brett

      Und jetzt macht Tabelle 1 gar keinen Sinn mehr (zumal die default-Sprache nicht festgelegt ist), "ref_id" ist nur eine Gruppe, also kann ich Tabelle 1 auch ganz streichen und genau das habe ich getan, dass ich die ID als Gruppen-Nummer übernehme hat nur den Sinn dass die Gruppe unique bleibt, ich könnte ebensogut irgendwo einen Zähler oder sowas hinspeichern und von dort immer die "nächste Gruppe" wählen oder ein Zufallswert oder das aktuelle Datum/Zeit bzw. dessen Timestamp oder oder oder... spielt eigentlich keine Rolle.
      Hmmm immerhin hat es mich auf die Idee gebracht über alternative Gruppen nachzudenken... Timestamp gefällt mir eigentlich.

      --
      sh:( fo:| ch:? rl:( br:& n4:& ie:{ mo:} va:) de:µ_de:] zu:) fl:( ss:| ls:[ js:(
  3. Guten Morgen,

    [...]
    mein Problem ist wahrscheinlich trivial, aber ich bin nicht so firm in SQL...
    Also ich habe eine Tabelle, in der ich quasi zwei IDs pflege, die eine ist unique, wie es sich gehört und die andere repräsentiert "Gruppen" von Einträgen, eine Refferenz. Genauer gesagt ist es eine Übersetzung. Etwa so:
    id | Wert | ref
    0 | Wert |  0
    1 | Value|  0
    2 | Brett|  2
    2 | Board|  2
    Ursprünglich hatte ich vorgesehen, dass die Referenzen der Einträge auf die refferenziert wird einfach "0" sind um zu zeigen, dass sie selbst die Refferenz sind. Es hat sich aber programmiertechnisch heraus gestellt, dass es einfacher ist, wenn sie tatsächlich auf sich selbst verweisen, wie oben dargestellt.

    Mit ist keine SQL-Funktion bekannt, die das von Dir gewünschte leisten würde. Aber Du könntest in der selben Transaktion, in der der INSERT abgesetzt wird, gleich danach die neue ID ermitteln (s. andere Antwort für MySQL) und einen UPDATE auf die Tabelle machen und die Referenz setzen. Nachdem Du eine Transaktion hast, ist das ganze ATOMar und dürfte kein Problem geben.

    Schöne Grüße,

    Peter