2011-08-06 33 views
2

我有两个表,问题答案。 答案包含密钥* question_id *如何在单个查询一对多关系中使用LAST_INSERT_ID?

当我创建一个问题,我插入一条记录到问题桌子和几个记录到回答表。是否可以使用LAST_INSERT_ID()或类似的方法在一个查询中完成所有这些操作?

I.e.类似于

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()在每个语句后发生更改,因此此查询将无法工作。无论如何要做这个工作,否则我将不得不把它分解成两个查询?

回答

5

您可以使用批量插入这样的:

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

谢谢!这工作完美! = D –

+0

我不知道这件事。我稍后会尝试......:D –

1

尝试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'); 

我认为还有另一种方式来做到这一点,但也许它会给你一个想法。

+0

虽然这也许工作,Sabeens前面回答显然是我所期待的。 –

+1

是...是最佳选择。我不知道我们可以使用LAST_INSERT_ID的批量插入。 :D –

相关问题