当id_array大时,此查询将花费大量时间。我怎样才能使其更快?也许可以在一个查询中执行此操作,而不是像我的示例中那样进行多个更新?
<?php
$sort = 1;
$id_array = array(
56,
14,
99,
54,
8,
92
);
foreach ($id_array as $id) {
mysqli_query($conn, "UPDATE id_table SET sort = '$sort' WHERE id = '$id'");
$sort++;
}
?>
答案 0 :(得分:3)
Legend认为在处理大型数据集时使用prepared statement
比其他类型的查询要快-是否正确,这取决于您决定-但使用准备好的语句,您可以尝试这个:
$sql='update id_table set sort = ? where id = ?';
$stmt=$conn->prepare( $sql );
$stmt->bind_param( 'ii', $sort, $id );
foreach( $id_array as $index => $id ){
$sort=$index+1;
$stmt->execute();
}
答案 1 :(得分:1)
假设您有一个数组
$id_array = array(56, 14, 99, 54, 8, 92);
并且您的数据库驱动程序允许多个sql语句 您可以尝试使用sql var a in子句并避免循环(避免对数字值也加引号)为IN子句构建适当的字符串
$yourArray = implode(', ', $id_array);
mysqli_query($conn, " set @sort = 0;
UPDATE id_table SET sort = @sort +1 WHERE id IN ( ". $your_Array . ")");
答案 2 :(得分:0)
这是我的最终解决方案。它效果很好,并且比我第一次尝试快得多。
$sort = 1;
$query = "UPDATE id_table SET sort = CASE ";
foreach($id_array as $id)
{
$query = $query . "WHEN id = '$id' THEN '$sort' ";
$sort++;
}
$query = $query . "END";
mysqli_query($conn, $query);