[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Множественное обновление таблицы
neopk
Здравствуйте! У меня возникла необходимость множественного обновления таблицы. У меня есть таблица, в ней 6 столбцов (id,rate, level, summ_1, summ_2, slave). В таблице 12 записей, и мне нужно одним запросом (желательно) их обновлять. Прочитал, что можно решить данную проблему с помощью ON DUPLICATE KEY , но не получилось у меня.
Буду весьма благодарен за помощь!



Спустя 2 минуты, 53 секунды (13.09.2012 - 22:24) Shuriken написал(а):
А так не канает:
update table
set id=$a, rate=$b...

Спустя 6 минут, 8 секунд (13.09.2012 - 22:30) neopk написал(а):
Цитата (Shuriken @ 13.09.2012 - 19:24)
А так не канает:
update table
set id=$a, rate=$b...

Так 12 записей в таблице, придется делать 12 запросов. Как-то не очень вариант

Спустя 4 минуты, 48 секунд (13.09.2012 - 22:35) Shuriken написал(а):
Цитата (neopk @ 13.09.2012 - 19:30)
Так 12 записей в таблице, придется делать 12 запросов. Как-то не очень вариант

А если в цикл загнать?

Спустя 31 минута, 44 секунды (13.09.2012 - 23:07) neopk написал(а):
Цитата (Shuriken @ 13.09.2012 - 19:35)
Цитата (neopk @ 13.09.2012 - 19:30)
Так 12 записей в таблице, придется делать 12 запросов. Как-то не очень вариант

А если в цикл загнать?

Ну конечно это вариант, но хотелось бы решить это в меньшее кол-во запросов к БД

Спустя 2 часа, 23 минуты, 40 секунд (14.09.2012 - 01:30) Invis1ble написал(а):
neopk
для начала уточни, как именно тебе нужно их обновить, на примере.

Спустя 8 часов, 53 минуты, 22 секунды (14.09.2012 - 10:24) neopk написал(а):
Цитата (Invis1ble @ 13.09.2012 - 22:30)
neopk
для начала уточни, как именно тебе нужно их обновить, на примере.

Ну вот так я обновляю 1 строку:
$result = mysql_query ("UPDATE requirements_table  SET rate='{$_POST['rate_1']}', level='{$_POST['lev_1']}', summ_1='{$_POST['summ_1_1']}', summ_2='{$_POST['summ_2_1']}', slave='{$_POST['slave_1']}' WHERE id='1' ");


А вот как-нибудь так хотелось бы обновить всю таблицу:
INSERT INTO `table` (id, field) VALUES (1, 1), (2, 12), (3, 0.5) ON DUPLICATE KEY UPDATE field = VALUES(field)

Спустя 12 минут, 16 секунд (14.09.2012 - 10:36) Shuriken написал(а):
Ты опиши откуда у тебя берутся данные, которые ты передаёшь в массив POST

Спустя 4 минуты, 21 секунда (14.09.2012 - 10:40) Invis1ble написал(а):
neopk
если тебе просто нужно обновить все записи независимо от каких-либо условий, то смотри здесь.
Если есть какое-то условие, то опиши его, потому что я так и не понял толком.

Спустя 12 минут, 4 секунды (14.09.2012 - 10:52) neopk написал(а):
Цитата (Shuriken @ 14.09.2012 - 07:36)
Ты опиши откуда у тебя берутся данные, которые ты передаёшь в массив POST

Данные передаются из формы на другой странице

Спустя 2 минуты, 30 секунд (14.09.2012 - 10:55) neopk написал(а):
Цитата (Invis1ble @ 14.09.2012 - 07:40)
neopk
если тебе просто нужно обновить все записи независимо от каких-либо условий, то смотри здесь.
Если есть какое-то условие, то опиши его, потому что я так и не понял толком.

Ваша ссылка ведет на пост Shuriken, но я же так и сделал изначально. Мне нужно обновить все в ОДИН, или, хотя бы, менее 12 запросов к БД (12 строк надо обновить).

Спустя 3 минуты, 59 секунд (14.09.2012 - 10:59) Shuriken написал(а):
Цитата (neopk @ 14.09.2012 - 07:52)
Данные передаются из формы на другой странице

Ну это понятно. Нужна конкретика, чтоб тебе подсказать как поступить. Какие данные передаются и как они пишутся в базу?

Спустя 6 минут, 11 секунд (14.09.2012 - 11:05) Invis1ble написал(а):
neopk
Цитата
Ваша ссылка ведет на пост Shuriken,

все правильно, я не ошибся.
Цитата
Мне нужно обновить все в ОДИН, или, хотя бы, менее 12 запросов к БД (12 строк надо обновить).

простым update без where ты и обновишь все 12 строк одним запросом.

Спустя 5 минут, 22 секунды (14.09.2012 - 11:10) Shuriken написал(а):
Цитата (Invis1ble @ 14.09.2012 - 08:05)
простым update без where ты и обновишь все 12 строк одним запросом.

Я так понял эти 12 записей разные, одним запросом они станут одинаковые

Спустя 5 минут, 30 секунд (14.09.2012 - 11:16) Invis1ble написал(а):
ясен пень одинаковые. ТС же молчит и не говорит, КАК ИМЕННО он хочет обновить данные. Запрос один? Один. Все строки обновятся? Все. Можно считать, что ответ дан?

Спустя 8 минут, 42 секунды (14.09.2012 - 11:25) neopk написал(а):
Цитата (Invis1ble @ 14.09.2012 - 08:16)
ясен пень одинаковые. ТС же молчит и не говорит, КАК ИМЕННО он хочет обновить данные. Запрос один? Один. Все строки обновятся? Все. Можно считать, что ответ дан?

Извиняюсь, ели не правильно сформулировал задачу. 12 строк разных, отличаются полем id (от 1 до 12, эти строки уже созданы в БД).
Надо обновить каждую строку в соответствии со значением переменных.
Переменные такие:
$_POST['rate_1'] ... $_POST['rate_12'];
$_POST['lev_1'] ... $_POST['lev_12'];
$_POST['summ_1_1'] ... $_POST['summ_1_12'];
$_POST['summ_2_1'] ... $_POST['summ_2_12'];
$_POST['slave_1'] ... $_POST['slave_12'];
Имя переменной после _ совпадает с полем id в бд, в той строке, которую нужно обновить данными переменными

Спустя 2 минуты, 48 секунд (14.09.2012 - 11:27) Shuriken написал(а):
Циклом сделай

Спустя 8 минут, 9 секунд (14.09.2012 - 11:36) Invis1ble написал(а):
UPDATE `table`
SET
`field` = CASE `id`
WHEN 1 THEN 'val1'
WHEN 2 THEN 'val2'
...
END

Спустя 1 минута, 3 секунды (14.09.2012 - 11:37) neopk написал(а):
Цитата (Shuriken @ 14.09.2012 - 08:27)
Циклом сделай

Ну хорошо, я сделал циклом, при попытке открыть страницу долго грузит и пишет
502 Bad Gateway, не понимаю в чем проблема.

for ($count = 1; $count<=12; ++$count) {
$result.$count = mysql_query ("UPDATE requirements_table SET rate='{$_POST['rate_.$count']}', lev='{$_POST['lev_.$count']}', summ_1='{$_POST['summ_1_.$count']}', summ_2='{$_POST['summ_2_.$count']}', slave='{$_POST['slave_.$count']}' WHERE id=$count ");
}

Спустя 11 минут, 39 секунд (14.09.2012 - 11:48) Shuriken написал(а):
Исправь
$_POST["rate_".$count]

Спустя 12 минут, 23 секунды (14.09.2012 - 12:01) neopk написал(а):
Та же ошибка
for ($count = 1; $count<=12; ++$count) {
$result.$count = mysql_query ("UPDATE requirements_table SET rate='{$_POST["rate_".$count]}', lev='{$_POST["lev_".$count]}', summ_1='{$_POST["summ_1_".$count]}', summ_2='{$_POST["summ_2_".$count]}', slave='{$_POST["slave_".$count]}' WHERE id=$count ");
}

Спустя 14 минут, 3 секунды (14.09.2012 - 12:15) neopk написал(а):
Цитата (Shuriken @ 14.09.2012 - 08:48)
Исправь
$_POST["rate_".$count]

Извиняюсь, все работает. Спасибо большое за помощь. Пока оставлю вариант с циклом, потом в процессе оптимизации программы буду использовать метод Invis1ble
Быстрый ответ:

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