[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как в одном Update запросе обновить несколько записей?
LDPRSL
День добрый. Возникла такая ситуация , что необходимо в таблице обновить несколько записей.
Т.е необходимо выполнить такой запрос :
Имеется массив содержащий необходимые key и value, требуется сделать обновления таблицы по данным этого массива.
UPDATE table SET value = $value WHERE key = $key
Можно конечно сделать цикл по массиву и вызвать необходимое количество раз Update, но таким способом не особо хочется пользоваться.

Какие есть предложения, как такое реализовать?





Спустя 55 минут, 10 секунд (9.07.2008 - 10:48) Ghost написал(а):

Спустя 57 минут, 37 секунд (9.07.2008 - 11:46) jetistyum написал(а):
ИМХО нельзя.. нужно делать несколько простых запросов... (если апдейт для разных id с разными значениями), если значение апдейта одно, а id- разные, то

UPDATE table SET value = $value WHERE key IN ($key1, $key2, $key3)

Спустя 27 минут, 2 секунды (9.07.2008 - 12:13) Ghost написал(а):
jetistyum, во-первых misqli позволяет это делать, во-вторых, даже без неё это сделать можно.. но несколько через..... ну в ощем нетрадиционными методами smile.gif

Спустя 4 часа, 31 минута, 57 секунд (9.07.2008 - 16:45) LDPRSL написал(а):
Спасибо, разобрался.

Спустя 52 минуты, 19 секунд (9.07.2008 - 17:37) jetistyum написал(а):
Цитата(Ghost @ 9.7.2008, 12:13) [snapback]42791[/snapback]
jetistyum, во-первых misqli позволяет это делать, во-вторых, даже без неё это сделать можно.. но несколько через..... ну в ощем нетрадиционными методами smile.gif



Эм.м.м. пример в студию...

Лично я порывшись в мозгах придумал только способ с Union ...

REPLACE INTO `table`

SELECT 1, 'test1', 55
UNION
SELECT 2, 'test2', 76


Спустя 1 час, 12 минут, 11 секунд (9.07.2008 - 18:49) Sylex написал(а):
обсуждалось уже:
mysqli_multi_query()
smile.gif

Спустя 2 часа, 11 минут, 25 секунд (9.07.2008 - 21:00) jetistyum написал(а):
Цитата(Sylex @ 9.7.2008, 18:49) [snapback]42835[/snapback]
обсуждалось уже:
mysqli_multi_query()
smile.gif



Эмм.. не работал с mysqli
Но на сколько почитал доки, то эта функция просто позволяет выполнить несколько mysql запросов ... по очереди...
но это же не значит что можно проапдейтить всё одним запросом...

аналогично, составить массив запросов по одному ... и в цикле сделать mysql_query
хотя так (через mysql_multi_query()) конечно красивее получается...
НО БЛИН, ЭТО ЖЕ ВСЁРАВНО НЕСКОЛЬКО ЗАПРОСОВ....

Спустя 11 часов, 7 минут, 53 секунды (10.07.2008 - 08:08) sergeiss написал(а):
Цитата(LDPRSL @ 9.7.2008, 10:53) [snapback]42776[/snapback]
Можно конечно сделать цикл по массиву и вызвать необходимое количество раз Update, но таким способом не особо хочется пользоваться.

Какие есть предложения, как такое реализовать?

А давай посмотрим по-другому.

Для изменения полей БД должна обратиться к каждой записи из тех, которые будут меняться, и изменить содержимое нужных ячеек. И какая разница БД, сколько ты запросов напишешь, если все равно надо будет проделать эти процедуры внутри БД?

Спустя 5 часов, 3 минуты, 13 секунд (10.07.2008 - 13:12) redow написал(а):
Цитата
Для изменения полей БД должна обратиться к каждой записи из тех, которые будут меняться, и изменить содержимое нужных ячеек. И какая разница БД, сколько ты запросов напишешь, если все равно надо будет проделать эти процедуры внутри БД?

разница в скорости... то ли пихнуть в бд все, а она распихает, то ли пихать по 1 строчке... если бы можно было сделать все 1 запросом, было бы намного быстрее и производительнее, но, к сожалению, для update такое еще не реализовали

Спустя 54 минуты, 26 секунд (10.07.2008 - 14:06) sergeiss написал(а):
Цитата(redow @ 10.7.2008, 14:12) [snapback]42930[/snapback]
Цитата
Для изменения полей БД должна обратиться к каждой записи из тех, которые будут меняться, и изменить содержимое нужных ячеек. И какая разница БД, сколько ты запросов напишешь, если все равно надо будет проделать эти процедуры внутри БД?

разница в скорости... то ли пихнуть в бд все, а она распихает, то ли пихать по 1 строчке... если бы можно было сделать все 1 запросом, было бы намного быстрее и производительнее, но, к сожалению, для update такое еще не реализовали

Я попытался осмыслить и ничего не понял...
Какая разница, кто "распихивает"? То ли ты это делаешь, то ли сама БД, но в любом случае количество работы и необходимое на работу время будут одинаковые.

Кстати... Если работать с PostgreSQL, то в один запрос можно вставить несколько разных запросов... Типа такого:
---
$sql="
insert into names (id, name, sirname) values (5, 'Name 005', 'Sirname 005');
insert into names (id, name, sirname) values (6, 'Name 006', 'Sirname 006');";
pg_query( $sql );
---

Для любителей писать код программы "по минимуму", чтобы в одной строке сделать всю прогу... Это, может быть, и будет удобнее smile.gif

Но еще раз повторю! Для БД это все равно будут разные запросы, а не один запрос!!! И на реальную производительность БД это ну никак не должно влиять.

Спустя 11 минут, 29 секунд (10.07.2008 - 14:17) Бармалейкин написал(а):
Цитата(sergeiss @ 10.7.2008, 13:06) [snapback]42942[/snapback]
...
Но еще раз повторю! Для БД это все равно будут разные запросы, а не один запрос!!! И на реальную производительность БД это ну никак не должно влиять.

Может быть имеется вииду, что надо учитывать оверхэд для посылки запроса? Но не уверен...

Спустя 3 часа, 41 минута, 58 секунд (10.07.2008 - 17:59) Sylex написал(а):
Цитата(redow @ 10.7.2008, 17:12) [snapback]42930[/snapback]
Цитата
Для изменения полей БД должна обратиться к каждой записи из тех, которые будут меняться, и изменить содержимое нужных ячеек. И какая разница БД, сколько ты запросов напишешь, если все равно надо будет проделать эти процедуры внутри БД?

разница в скорости... то ли пихнуть в бд все, а она распихает, то ли пихать по 1 строчке... если бы можно было сделать все 1 запросом, было бы намного быстрее и производительнее, но, к сожалению, для update такое еще не реализовали


как раз-то реализовали:)
mysqli_multi_query() при большом количестве запросов производительней в десятки раз smile.gif

Спустя 2 дня, 20 часов, 38 минут, 13 секунд (13.07.2008 - 14:38) redow написал(а):
Sylex, я имел ввиду mysql а не mysqli smile.gif

Спустя 5 месяцев, 29 дней, 7 часов, 51 минута, 48 секунд (12.01.2009 - 23:29) Guest написал(а):
vxzvzx[fliph][/fliph][flipv][/flipv][shadow=][/shadow]
Скрытый текст


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.