У меня есть ниже Array (50 элементов в этом массиве. Поэтому ниже MySQL запрос запускается 50 раз.) Для обновления в БД
$array = [['id'=>1,'result'=>'21.25'],['id'=>2,'result'=>'13.03']]// ... up to 50 elements in this array. so below mysql query fires 50 times.
И я делаю так.
foreach ($array as $key => $value) {
$postArray = ['result' => $value['result']];
DB::table('table')->where('id',$value['id'])->update($postArray);
}
Вопрос: возможно ли объединить все в одном запросе?
Я пытался так, но не работает,
giving error `"errormsg":"Database error!! preg_replace(): Parameter mismatch, pattern is a string
в то время как замена — это массив
foreach ($array as $key => $value) {
$postArray[] = [
'id' => $value['id'],
'result' => $value['result']
];
}
DB::table('table')->update($postArray);
Вы можете использовать функцию whereIn () для обновления нескольких строк одинаковыми данными.
$idArray = array(1, 2, 3);
$postArray = ['result' => $value['result']];
DB::table('table')->whereIn('id',$idArray)->update($postArray);
Примечание. Из синтаксиса кода я предположил, что вы используете Laravel Framework. Таким образом, решение относится к Laravel. Если вы используете другой фреймворк, вы можете проверить аналогичный метод для него.
Других решений пока нет …