![](/img/trans.png)
[英]copying multiple records from one table to another (same structure) (PHP/MySQL)
[英]Improve performance when copying records from table to another one
嗨朋友:)我被要求創建一個PHP代碼來處理存儲在DB中的一些工人的數據。 我得到了理想的結果,但需要秒和秒(秒和秒!>。<)完成,所以我擔心我沒有以正確的方式做某事:(
worker的數據存儲在mysql表(table1)中,如下所示:
我給了一對日期: initial_date (a)和final_date (b),所以我的目標是將給定的工人數據從a到b復制到新表(table2)中。 預期的表應如下所示(此表稍后將用作進一步操作的基礎,這不是問題的一部分)
要求覆蓋a和b日期之間的任何現有數據,並“跳過”周末和假日。
為了實現我的目標,我正在對此進行編碼(假設已經完成了連接以及所做的一切和checkworkingday函數):
$initialdate = '2016-10-10';
$finaldate = '2016-10-12';
$x = $initialdate;
do {
if (checkworkingday($x) == true) {
$query = mysqli_query($connection,"SELECT name,task FROM table1");
while($row = mysqli_fetch_array($query)) {
$task = $row['task'];
$worker = $row['name'];
$query2 = mysqli_query($connection,"SELECT task FROM table2 WHERE name = '$worker' AND date = '$x'");
$row2 = mysqli_fetch_array($query2);
$existingtask = $row2['task'];
if (!isset($existingtask)) {
mysqli_query($connection,"INSERT INTO table2 (date,name,task) VALUES('".$x."','".$worker."','".$task."')");
} else {
mysqli_query($connection,"UPDATE table2 SET task = '".$task."' WHERE date = '".$x."' AND worker = '".$name."'");
}
}
}
$x = date('Y-m-d', strtotime($x . "+1 day"));
} while ($x <= $finaldate);
如示例所示,僅需3天,需要很長時間才能結束; 並且持續數周或數月需要非常非常長的時間(根據日期范圍,甚至超過最大執行時間!)。
我是新手,我知道代碼非常“質朴”,但我修改並檢查了代碼和信息,但沒有獲得更好的性能。 我究竟做錯了什么? 謝謝 :)
而不是循環enitre數據,嘗試INSERT.. SELECT
:
INSERT INTO table2 (date,name,task)
SELECT date,name,task
FROM Table1
WHERE < >;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.