簡體   English   中英

將記錄從表復制到另一個表時提高性能

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

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