将记录从表复制到另一个表时提高性能

时间:2016-10-09 11:49:47

标签: php mysql performance copy records

嗨哥们:)我被要求创建一个PHP代码来处理一些工人'数据存储在DB中。我得到了理想的结果,但它需要几秒钟(秒和秒!>。<)才能完成,所以我担心我没有以正确的方式做某事:(

工人'数据存储在mysql表(table1)中,如下所示:

enter image description here

我给了一对日期: initial_date (a)和 final_date (b),所以我的目标是复制给定的工作人员'新表(表2)中的数据,从a到b的日复一日。预期的表应如下所示(此表将在以后用作进一步操作的基础,这不是问题的一部分)

enter image description here

要求在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天,需要很长时间才能结束;并且持续数周或数月需要非常非常长的时间(根据日期范围,甚至超过最大执行时间!)。

我是新手,我知道代码非常质朴,但我已经修改并检查了代码和信息而没有获得更好的性能。我究竟做错了什么?谢谢:))

1 个答案:

答案 0 :(得分:0)

尝试INSERT.. SELECT

,而不是循环浏览enitre数据
INSERT INTO table2 (date,name,task)
SELECT date,name,task 
FROM Table1
WHERE < >;