【问题标题】:Improve performance when copying records from table to another one将记录从表复制到另一个时提高性能
【发布时间】:2016-10-09 11:49:47
【问题描述】:

嗨,伙计们 :) 我需要创建一个 php 代码来处理存储在 DB 中的一些工人数据。我得到了想要的结果,但它需要几秒钟和几秒钟(几秒钟和几秒钟!>.

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

我有一对日期:initial_date (a) 和 final_date (b),所以我的目标是将给定工人的数据复制到一个新的表(table2),逐日从a到b。预期的表格应该如下图(这个表格后面会作为进一步操作的基础,不属于问题的一部分)

要求覆盖 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天,需要很长时间才能结束;几个星期或几个月,它需要非常非常长的时间(甚至超过最大执行时间,具体取决于日期范围!)。

我是新手,我知道代码很“粗俗”,但我已经修改并检查了那里的代码和信息,但没有获得更好的性能。我究竟做错了什么?谢谢:)

【问题讨论】:

  • 对不起,我忘记了另一个要求,即检查 a 和 b 之间的日期是不是周末或假期。刚刚编辑。

标签: php mysql performance copy records


【解决方案1】:

不要循环遍历整个数据,试试INSERT.. SELECT

INSERT INTO table2 (date,name,task)
SELECT date,name,task 
FROM Table1
WHERE < >;

【讨论】:

  • 谢谢萨吉!我刚刚编辑了帖子,因为我又忘记了一个请求(检查工作日)。
  • 如帖子中所述,checkworkingday 是一个给定的函数(以避免使帖子更加复杂)。如果这一天是工作日,我们假设它给我们 true,如果不是,它给我们 false :)
  • @b1919676 你能把它做成一个SQL存储函数吗?然后你可以在查询中使用它。
  • 感谢 Barmar 先生的建议。我不知道该怎么做,我要研究一下,我会试试的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-02
  • 2012-06-26
相关资源
最近更新 更多