Как грамотно решить проблему - обновление 200-300-400 записей за один раз??? Заказчик стоит на своем - все сразу отредактировать, и в один клик сохранить. Хостер - просто предупреждает - блокировку за перегрузку сделает. Не хочется по частям сохранять, админом на самом сайте "блондинка", проблем много будет.... И красиво получается в админке - все интуитивно понятно.... HELP - как за раз обновить много записей в MYSQLi Погуглил - у каждого свой "рецепт", но некоторые статьи просто мхом поросли, особого доверия не вызывают по дате написания. Гуру - направьте на путь истинный
что значит обновить? обновить счетчики по формуле - это одно. обновить контент - фильтром - другое. заменить контент вообще - третье. тут может нехватить позвожностей самой БД. вы что конкретно хотите сделать?
А что мешает просто составить большой и толстый запрос? update table1 set field1 = 1, field2 = 'abc' where id = 1; update table1 set field1 = 5, field2 = 'wwww' where id = 3; .... И отправить одним запросом в базу.
Во-первых, можно использовать multi_query. Это в десятки раз экономичнее отдельных запросов. Во-вторых, для обновления данных можно воспользоваться оператором REPLACE вместо UPDATE. Синтаксически он аналогичен INSERT, а значит можно все 400 строк уместить в один запрос.
Код (Text): UPDATE mytable SET title = CASE WHEN id = 1 THEN 'Значение'; WHEN id = 2 THEN 'Новое значение'; ELSE title END; или я не правильно понял ТС?
Спасибо всем отвечавшим. Вроде получилось! Для контроля увеличил в два раза количество строк для замены, сервер справляется. Что и как сделал ( на ГУРУ не претендую... только мое мнение + реальные результаты ) Количество параметров "name" на странице не бесконечно, можно конечно попробовать добраться и изменить настройки, связываться не захотел. multi_query - не хватает его, 10-20 запросов в одном обращении отрабатывает, на большом количестве отказ. Этот пример вообше не смог запустить в мускуле, матюкается он про ошибки синтаксиса Код (Text): UPDATE mytable SET title = CASE WHEN id = 1 THEN 'Значение'; WHEN id = 2 THEN 'Новое значение'; ELSE title END; Получилось так: Код (Text): UPDATE block_content SET sorting = ELT(FIELD(`id`, 9,12, 18), 900,1200,1800) WHERE `id` IN (9,12,18)
для многострочного апдейта можно воспользоваться insert…on duplicate update. указываем в списке обновляемых полей первичный ключ и те поля которые реально обновляются. http://stackoverflow.com/questions/3432/multiple-updates-in-mysql
разница между insert…on duplicate update и replace в том, что первый делает реальный апдейт существующих строк, а второй сначала удаляет существующую строку, затем вставляет новую.