[英]PDO last insert id Alternative?
我正在通过INSERT INTO table1 SELECT * FROM table2
查询将数据从一个表移动到另一个INSERT INTO table1 SELECT * FROM table2
。 所移动的数据包含有关员工的信息(名字,姓氏等)以及该员工简历的路径。 我现在正尝试将该信息分为两个不同的表,一个表用于员工信息,一个表用于文档(简历)信息,通过将员工ID放在文档表中来链接两者。 员工ID和文档ID均为自动递增的PK值。
我知道我可以将这些查询放入for循环并一次移动一行,在将文档信息添加到文档表中以链接两者之前,先获取employee表的last insert id
。 我很好奇是否有一种方法可以在一个查询中执行此操作,它能够从原始表中获取多行,将信息拆分为要插入到两个新表/不同表中,并在雇员中使用自动生成的ID表作为文档表中的值。...希望这很有意义!
抱歉,如果我弄错了,但是是否要对当前的数据库表执行一次此查询? 而且我猜两个表都具有相同数量的行(并且彼此顺序)?
如果将它们拆分,您将得到:
员工表例如:
- employee_id(auto_increment)
- employee_firstname
- employee_lastname
- employee_document_id
- +whatever you want etc
文档表例如:
- document_id(auto_increment)
- document_name
- document_path
- document_employee_id
- +whatever you want etc.
如果这是您的意思,那么我认为以下方法会起作用:
1:设置PDO(编辑器对我不起作用,这就是为什么“>”)
<?php
$config['db'] = array(
'host' => 'host',
'username' => 'username',
'password' => 'password',
'dbname' => 'dbname'
);
$db = new PDO('mysql:host=' . $config['db']['host'] . ';dbname=' . $config['db']['dbname'], $config['db']['username'], $config['db']['password']);
?>
2:安装程序插入查询
<?php
$select_query = "SELECT * FROM table1";
//$db is PDO example name
$select_all = $db->prepare($select_query);
$select_all->execute();
$count = $select_all->rowCount();
for(var i = 0; i =< $count; ++i) {
$insert_query1 = "INSERT INTO table1 (employee_firstname,
employee_lastname, employee_document_id)
VALUES(employee_firstnameValue, employee_lastnameValue,'"i"'";
$insert_query2 = "INSERT INTO table2 (document_name, document_path,
employee_id) VALUES(document_nameValue, document_pathValue, '"i"')"
$insert_table1 = $db->prepare($insert_query1);
$insert_table1->execute()
$insert_table2 = $db->prepare($insert_query2);
$insert_table2->execute()
}
?>
我认为上面的方法会起作用,因为您会得到一个从1开始的auto_increment,每次都会出现++ i。 因此,employee_document_id和document_employee_id都将获得++ i(为1),就像auto_increment为(也是1)一样
但是,也许这是经过深思熟虑的。或者无法在您的模型中工作
旁注:
编辑:另一个解决方案是使用查询,如“ SELECT MAX”,但这是不安全的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.