update нескольких строк один запросом

Статус
В этой теме нельзя размещать новые ответы.

Dziamid

Создатель
Регистрация
8 Окт 2008
Сообщения
11
Реакции
0
$arr = array(1,3,2,4,5,6);
$i = 0;
foreach ($arr as $id) {
$i++;
$res = $mdb2->exec("UPDATE table SET index = $i WHERE id = $id")
}
Как сделать тоже самое одним запросом???

Добавлено через 25 минут
Т.е. нужно что-то вот такое:
UPDATE table SET index = INC(1) ORDER BY index, где
INC() - придуманная мной функция mysql которая увеличивает число при каждом фактическом абдейте строки
Кто-нибудь делал что-нибудь подобное?
 
$arr = array(1,3,2,4,5,6);
$i = 0;
foreach ($arr as $id) {
$i++;
$res = $mdb2->exec("UPDATE table SET index = $i WHERE id = $id")
}
Как сделать тоже самое одним запросом???
Т.е. нужно что-то вот такое:
UPDATE table SET index = INC(1) ORDER BY index, где
INC() - придуманная мной функция mysql которая увеличивает число при каждом фактическом абдейте строки
Кто-нибудь делал что-нибудь подобное?
не пойму, при чем здесь увеличение числа?
в массиве $arr = array(1,3,2,4,5,6); числа идут не по порядку, я решил. что это фиксированно заданные значения.
Или нужно просто в базе поле инкрементировать? Подробнее опиши задачу.
 
... WHERE id IN(/* тут список значений через запятую */)
и пофиг по порядку или нет
 
как я понял, речь про сохранение приоритета сортировки для каких-то объектов
я тоже делаю это с помощью нескольких запросов в цикле, т.е. именно тот вариант, от которого вы хотите отказаться
 
Может попробывать так:
1. делаем таблицу, например:
create table x( id int(10), order_no int(10)) ;
2. добавляем в неё записи с id и порядком следования
insert into x values (1, 1);
insert into x values (3, 2);
insert into x values (2, 3);
insert into x values (4, 4);
insert into x values (5, 5);
3. делаем update с вызовом супер функции inc()
UPDATE a, x SET a.id = inc(1) WHERE a.id = x.id order by x.order_no
 
Можно составить один большой запрос

UPDATE table SET index = 1 WHERE id = 1:
UPDATE table SET index = 2 WHERE id = 3;
...
 
Зависит от того, что вам нужно сделать.

Если провести одну и ту же операцию над всеми строками, например прибавить одно и то же число или вызвать функцию, достаточно сделать UPDATE ... WHERE id IN (1,3,2,4,5,6).

Если нужно проапдейтить значения полей на своё значение для каждой строки, в MySQL для этого есть такой синтаксис:

INSERT ...
ON DUPLICATE KEY UPDATE id=VALUES(id)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху