Снова запросы внутри цикла

Статус
Закрыто для дальнейших ответов.

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
Есть два массива. В одном из них id_login пользователя, а в другом хп(жизни) этого логина. Допустим у меня в бою было 20 персонажей. Значит в первом массиве будет 20 строк с id_логинами, а во втором 20 строк с оставшимися хп для каждого id_login(a)... мне нужно обновить всех этих персонажей в главное таблице с id_login и хп...
Вот я обновляю так:
Код:
for($i=0; $i<count($id_login); $i++){mysql_query("update `stats` set `hp_seichas`='".$ob_hp_seichas[$i]."' where `id_login`='".$id_login[$i]."'");}
т.е будет 20 запросов по обновлению. Можно ли как то сделать, что бы обновить все эти логины одним запросом? Ну или хотя бы как то упростить, а то внутри цикла - ни есть хорошо:(
P.S Для каждого id_логина - свои хп для обновления..
 

medwoodu

Злобный модер
Регистрация
22.12.2005
Сообщения
1 418
Есть два массива. В одном из них id_login пользователя, а в другом хп(жизни) этого логина. Допустим у меня в бою было 20 персонажей. Значит в первом массиве будет 20 строк с id_логинами, а во втором 20 строк с оставшимися хп для каждого id_login(a)... мне нужно обновить всех этих персонажей в главное таблице с id_login и хп...
Вот я обновляю так:
Код:
for($i=0; $i<count($id_login); $i++){mysql_query("update `stats` set `hp_seichas`='".$ob_hp_seichas[$i]."' where `id_login`='".$id_login[$i]."'");}
т.е будет 20 запросов по обновлению. Можно ли как то сделать, что бы обновить все эти логины одним запросом? Ну или хотя бы как то упростить, а то внутри цикла - ни есть хорошо:(
P.S Для каждого id_логина - свои хп для обновления..
упростить не получится
 

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
Есть два массива. В одном из них id_login пользователя, а в другом хп(жизни) этого логина. Допустим у меня в бою было 20 персонажей. Значит в первом массиве будет 20 строк с id_логинами, а во втором 20 строк с оставшимися хп для каждого id_login(a)... мне нужно обновить всех этих персонажей в главное таблице с id_login и хп...
Вот я обновляю так:
Код:
for($i=0; $i<count($id_login); $i++){mysql_query("update `stats` set `hp_seichas`='".$ob_hp_seichas[$i]."' where `id_login`='".$id_login[$i]."'");}
т.е будет 20 запросов по обновлению. Можно ли как то сделать, что бы обновить все эти логины одним запросом? Ну или хотя бы как то упростить, а то внутри цикла - ни есть хорошо:(
P.S Для каждого id_логина - свои хп для обновления..
упростить не получится
А спорим, что получится? :) :) :)
Код:
UPDATE `stats` SET `hp_seichas` = (
case `id_login`
when '1'  then '1000'
when '2' then '2000' end)
WHERE `id_login` in ('1', '2');
//Так можно изменить и тясячу строк...
//пример:
UPDATE `stats` SET `hp_seichas` = (
case `id_login`
when '1'  then '1000'
when '2' then '2000'
when '3'  then 'текст в третьем логине'
when '4' then 'текст в 4 логине'
end)
WHERE `id_login` in ('1', '2','3','4');
Где:
stats - название таблицы
hp_seichas - столбец, по которому нужно будет вести изменение в таблице stats
id_login - уникальный id пользователей в таблице stats
when '1' и when '2' -id_login(ы) для изменения в таблице stats
then '1000' и then '2000' - сам текст, на который заменится в таблице stats (т.е обновляем столбец hp_seichas)
end - завершение
ну и дальше понятно.
Это я привел пример работы, что бы было понятно, как это работает.
А в моем случае это получилось вот так:
Код:
for($i=0; $i<count($ob_id); $i++){$sql.="when '".$ob_id[$i]."' then '".$ob_hp_seichas[$i]."'";}
mysql_query("update `stats` set `hp_seichas`=(case `id_login` $sql end) where `id_login` in (".implode(',',$ob_id).")");
Одним запросом всё это дело обновил))) Всё же лучше чем 20 запросов))
Комментируем, интересно мнение по этому запросу)
Кстати, забыл добавить, что если вдруг понадобится редактировать и другие столбцы, то их надо добавлять по тому же принципу. Пример:
Код:
UPDATE `stats` SET `hp_seichas` = (
case `id_login`
when '1'  then '1000'
when '2' then '2000'
when '3'  then 'текст в третьем логине'
when '4' then 'текст в 4 логине'
end),
`STOLBEC2` = (
case `id_login`
when '1'  then 'текст 1'
when '2' then 'текст 2'
when '3'  then 'текст в третьем логине'
when '4' then 'текст в 4 логине'
end)
WHERE `id_login` in ('1', '2','3','4');
 
Статус
Закрыто для дальнейших ответов.
Верх Низ