【发布时间】:2019-01-31 05:42:17
【问题描述】:
我正在尝试使用 Ajax 和 PHP 更新数据。以下脚本更新数据,但运行时间过长。 PHP
$groupId = $_POST['group_id'];
$Id_array = $_POST['Id'];
$result_array = $_POST['result'];
$data = array();
if(count($_POST['data']) > 0 && !empty ($_POST['data'])){
foreach($_POST['data'] as $key => $array){
$row = array();
$row['team_id'] = intval($array['team_id']);
$row['Note'] = strip_tags(trim(strval($array['Note'])));
$data[$key] = $row;
}
for ($i = 0; $i < count($Id_array); $i++) {
$Id = intval($Id_array[$i]);
$result = strip_tags(trim(strval($result_array[$i])));
$sql1 = $db->prepare("UPDATE teams SET result = :result WHERE id = :id ");
foreach($data as $key => $array){
$sql1 ->execute(array(':result' => $result, ':id' => $Id));
}
$sql2 = $db->prepare("UPDATE teams SET note = :note WHERE team_id = :teamid AND group_id = :group_id");
foreach($data as $key => $array){
$sql2->execute(array(':note' => $array['Note'], ':teamid' => $array['team_id'], ':group_id' => $groupId ));
}
【问题讨论】:
-
您可能需要对每个查询或循环进行一些计时和记录。您一次更新多少行?第一个查询应该进行优化,因为您是按 id 更新的(我猜这是您的主键),但如果您在 team_id 和 group_id 上没有索引,第二个查询可能会很慢。
-
您能否在不进行第二次查询的情况下执行此脚本?
-
@Shujaat 是的,它不会导致 1 个查询出现问题。
-
@aynber 我在第一次查询时每个 id 更新 1 行,而在 query2 上它应该是多行
-
尝试将
$sql1 = $db->prepare和$sql2 = $db->prepare语句移到for(){}循环之外。您只需要准备一次并执行多次。