如何使用单个查询更新多个数据?

时间:2019-08-06 05:42:09

标签: php mysql

当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++;
}
?>

3 个答案:

答案 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);