Как я могу использовать LAST_INSERT_ID в одном запросе отношения один ко многим? - PullRequest
2 голосов
/ 06 августа 2011

У меня есть две таблицы, вопросы и ответы . ответы содержат ключ * question_id *

Когда я создаю вопрос, я вставляю одну запись в таблицу Вопросы и несколько записей в таблицу ответы . Можно ли использовать LAST_INSERT_ID () или подобное для всего этого в одном запросе?

т.е. что-то вроде

INSERT INTO questions VALUES(NULL, 'My question');

INSERT INTO answers VALUES(NULL, LAST_INSERT_ID(), 'Answer 1');
INSERT INTO answers VALUES(NULL, LAST_INSERT_ID(), 'Answer 2');
INSERT INTO answers VALUES(NULL, LAST_INSERT_ID(), 'Answer 3');

Очевидно, этот запрос не будет работать, поскольку LAST_INSERT_ID () изменяется после каждого оператора. Есть ли способ заставить это работать или мне придется разбить его на два запроса?

Ответы [ 2 ]

5 голосов
/ 06 августа 2011

Вы можете использовать массовые вставки, как это:

INSERT INTO answers VALUES
          (NULL, LAST_INSERT_ID(), 'Answer 1') , 
          (NULL, LAST_INSERT_ID(), 'Answer 2') , 
          (NULL, LAST_INSERT_ID(), 'Answer 3');
1 голос
/ 06 августа 2011

Попытайтесь сохранить значение de в переменной

INSERT INTO questions VALUES(NULL, 'My question');
SET @id = (SELECT LAST_INSERT_ID());
INSERT INTO answers VALUES(NULL, @id, 'Answer 1');
INSERT INTO answers VALUES(NULL, @id, 'Answer 2');
INSERT INTO answers VALUES(NULL, @id, 'Answer 3');

Я думаю, что есть другой способ сделать это, но, возможно, это даст вам идею.

...