2016-05-01 16 views
1

Ich mache eine Website, wo Benutzer Daten über Formulare eingeben können. Aus diesem Grund muss ich eine Zeile in die erste Tabelle eingeben und nach dem Einfügen einer Zeile in der zweiten Tabelle mit der vo2testID aus der ersten Tabelle, die eine Auto-inkrementierte Fremdschlüssel ist.Einfügen von Zeilen in mysql db mit mit insert_last_insert_ID

table 2 table 1

Mein Problem ist, wenn ich versuche, etwas in die zweite Tabelle mit dieser Abfrage einfügen:

INSERT INTO vo2phases_tb (VO2_TestID, Phase, Time, Intensity, RER, Borgscale, Pulse) 
VALUES(LAST_INSERT_ID(),'1', '12:00:00', '10', '23.5', '5', '110'); 

ich diesen Fehler:

enter image description here

I Ich habe mich nach einer Lösung umgesehen, aber die einzige, die ich gefunden habe, war Disa blende den Fremdschlüsselcheck, und ich will das nicht tun.

Antwort

0

Siehe Dokumentation von mysql:

With no argument, LAST_INSERT_ID() returns a BIGINT UNSIGNED (64-bit) value representing the first automatically generated value successfully inserted for an AUTO_INCREMENT column as a result of the most recently executed INSERT statement.

LAST_INSERT_ID Werke weltweit. Angesichts der Benennung nehme ich an, dass Einsätze in vo2phases_tb mehrfach für jede VO2_TestID gemacht werden. Daher wird die Einfügeabfrage bei der zweiten Einfügung fehlschlagen, da die zuletzt eingefügte Abfrage kein gültiger Fremdschlüssel ist.

Lösung wäre, die VO2_TestID direkt nach dem Einfügen zu extrahieren und es eigenhändig zu übergeben. Dies ist auch dann nützlich, wenn mehrere Tests gleichzeitig ausgeführt werden und Parallelitätsprobleme vermieden werden.

+0

Ich habe nicht darüber nachgedacht, danke, ich werde in einer Variablen für den späteren Gebrauch speichern. Ich habe immer noch das Problem, dass 'LAST_INSERT_ID()' nicht zuletzt ID eingefügt wird. Ich habe versucht, ein simpel 'SELECT LAST_INSERT_ID()' zu machen und es gibt eine Null zurück. – R0ede

+0

Vielleicht hilft das: http://stackoverflow.com/questions/11302377/last-inserts-id-returning-multiple-rows-of-0 –

0

Sie sollten versuchen, den Wert von LAST_INSERT_ID() in einer benutzerdefinierten Variablen zu speichern. Beispielsweise.

INSERT INTO vo2test_tb (blah blah blah) VALUES (blah blah blah); 
SET @testId := LAST_INSERT_ID(); 
INSERT INTO vo2phases_tb 
      (VO2_TestID, Phase, Time, Intensity, RER, Borgscale, Pulse) 
     VALUES (@testId, blah blah blah); 

INSERT INTO vo2phases_tb 
      (VO2_TestID, Phase, Time, Intensity, RER, Borgscale, Pulse) 
     VALUES (@testId, blah blah blah); 

INSERT INTO vo2phases_tb 
      (VO2_TestID, Phase, Time, Intensity, RER, Borgscale, Pulse) 
     VALUES (@testId, blah blah blah); 

Auf diese Weise kann jede untergeordnete Zeile die richtige ID der übergeordneten Zeile abrufen.