Множественный UPDATE

Главные вкладки

Аватар пользователя dudin.ie dudin.ie 21 апреля 2011 в 0:08

Можно ли заменить конструкцию вида:

<?php
$count 
1;
$nids=array('1','5','12','21','55');
foreach (
$nids as $nid) {
  
db_update('nweight')
    ->
fields(array('weight' => $count))
    ->
condition('nid' $nid)
    ->
execute();
  
$count++;
}
?>

одним запросом к базе данных?

А то в моем случае массив $nids может состоять и из 100 элементов и больше.
100 апдейтов за раз делать не хочу *)

Комментарии

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 21 апреля 2011 в 0:33

"dudin.ie" wrote:
А то в моем случае массив $nids может состоять и из 100 элементов и больше.

если там в запросе будет in() то я скажу что длина таких конструкций у мускля лимитируется.

дели на пачки по 40-60 nid и делай таки несколько запросов.
db_query('UPDATE ....

Аватар пользователя dudin.ie dudin.ie 21 апреля 2011 в 0:50

Полностью выглядит так:

<?php
//$_POST['tdoo_nid'] - одномерный массив, состоящий из nid приехавший на AJAX запросе.
if ($_POST['tdoo_nid']) {
  
$count 1;
  
// Упорядочиваем индексы в базе данных:
  
foreach ($_POST['tdoo_nid'] as $snid) {
    
db_update('nweight')
      ->
fields(array('tdoo_weight' => $count))
      ->
condition('nid' $snid)
      ->
condition('uid' $GLOBALS['user']->uid)
      ->
execute();
    
$count++;
  }
}
?>

Никаких in(), как видите.
Можно решить в один запрос?