簡體   English   中英

PDO最后插入id替代?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM