我有一个带有后端的MySQL数据库:PHP。
在一个表格中,我必须插入 60,000行。
我们查询了返回1,000行的PHP。对于每行,我们必须插入60行。我们认为制定循环,但我们不知道这是否是最好的做法。
插入数据的代码部分是:
$turnos = $db->query("SELECT * FROM turno t
WHERE t.canchaId = :cancha
AND t.fecha BETWEEN :fechaInicio AND :fechaFin
AND t.nombre LIKE :cadena
ORDER BY t.fecha,t.hora ASC",
array("cancha" => $cancha["idCancha"], "fechaInicio" => $fechaInicio, "fechaFin" => $fechaFin, "cadena" => "%turno fijo%"));
foreach($turnos as $turno) {
//turnos have 1000 rows
$fecha = date_create($turno["fecha"]);
date_add($fecha, date_interval_create_from_date_string('7 days'));
$anioAuxiliar = 2017;
while(2017 == $anioAuxiliar){
//60 times
$data1 = turno[data1];
$data2 = turno[data2];
...
$fechaAGuardar = (String) $fecha->format('Y-m-d');
$result = $db->query("INSERT INTO turno(fechaAGuardar, data2, data3, data4, data5, data6, data7, data8) VALUES(:fechaAGuardar, :data2, :data3, :data4, :data5, :data6, :data7, :data8)",
array("fechaAGuardar" => $fechaAGuardar, "data2" => $data2, "data3" => $data3, "data4" => $data4, "data5" => $data5, "data6" => $data6, "data7" => $data7, "data8" => $data8));
date_add($fecha, date_interval_create_from_date_string('7 days'));
$anioAuxiliar = (int) $fecha->format("Y");
}
$cantidad_turnos = $cantidad_turnos + 1;
}
这个php是用phpmyadmin进入托管的。
所以我的问题是:
这是插入60,000行的最佳方法吗?
我们考虑考虑另一个约束吗? (例如:phpmyadmin不允许您插入该行数量)
感谢您的帮助,欢迎任何建议
// // EDIT
插入数据更改,我们必须插入datetime,并且对于每个循环,我们必须在插入的最后一个日期添加7天。所以我们不能使用insert with select
答案 0 :(得分:0)
作为评论中描述的一群研究员,如果这些数据位于同一服务器/数据库中,则INSERT / SELECT是可行的方法。根本不需要使用PHP。您的年度评论可以是handled with DATE_ADD。
无论如何,如果有任何其他要求并且您不能使用PHP,请考虑使用Bulk Data Loading。
分析您的代码,最重要的提示将是:不要使用多个INSERT INTO TABLE
表达式。每个INSERT INTO都会导致数据库往返,事情会变得很慢。而不是它,用一个INSERT INTO
(来自链接的例子)连接多个值:
祝你好运!插入有价值的值(1,2),(5,5),......;