【发布时间】: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