Есть табличка, с некими полями.
Есть массив вида ид=>значение
нужно сделать апдейт, что бы у строк у которых ид=ид(см.выше), изменилось значение колонки itemOrder на значение(см.выше)
Одним запросом. Можно, не?
Спустя 12 минут, 15 секунд (13.12.2010 - 19:55) ИНСИ написал(а):
vital если правильно тебя понял, то как-то так:
foreach($array as $key => $data) {
mysql_query("
UPDATE `table`
SET `itemOrder` = '{$data}'
WHERE `id` = {$key}
");
}
Спустя 5 минут, 36 секунд (13.12.2010 - 20:00) twin написал(а):
Ужос... Немедленно читать про VALUES
Спустя 5 минут, 38 секунд (13.12.2010 - 20:06) ИНСИ написал(а):
Цитата |
Ужос... Немедленно читать про VALUES |
ты мне? Если да, то не совсем тебя понял.
Спустя 41 минута, 25 секунд (13.12.2010 - 20:47) twin написал(а):
Упс, прошу скузми. UPDATE же там. Попутал.
Одним запросом так не сделать, конеш.
Одним запросом так не сделать, конеш.
Спустя 25 минут, 54 секунды (13.12.2010 - 21:13) vital написал(а):
Цитата |
то как-то так: |
вот как-то так я и не хотел)
Спустя 1 минута, 8 секунд (13.12.2010 - 21:15) vital написал(а):
бтв, сдеалал вот так
вроде работает.
UPDATE `trainingType`
SET
`itemOrder` = ELT(FIELD(id, ' . implode(',', array_flip($arr)) . '), ' . implode(',', $arr) . ')
WHERE
id IN (' . implode(',', array_flip($arr)) . ')';
вроде работает.
Спустя 1 минута, 30 секунд (13.12.2010 - 21:16) vital написал(а):
выдрано из исходника, простите если что.
Спустя 20 часов, 51 минута, 25 секунд (14.12.2010 - 18:07) SlavaFr написал(а):
@vital ты таким запросом сэкономиш 0.05 секунд и одновременно зделаеш код более сложным в восприятии.
к примеру array_flip сожрет все клучи у которых одинаковоe значение и таким образом зделает из масива array(1=>2,2=>2) масив array(2=>2).
T.e в твоем случае нужное UPDATE с ID=1 вообще не будет произведенно.
Не надо усложнять код, так как ты его сам потом не разбереш.
Используй лучше Prepared Statements и база выполнит твой запрос довольно быстро http://php.net/manual/en/pdo.prepared-statements.php
к примеру array_flip сожрет все клучи у которых одинаковоe значение и таким образом зделает из масива array(1=>2,2=>2) масив array(2=>2).
T.e в твоем случае нужное UPDATE с ID=1 вообще не будет произведенно.
Не надо усложнять код, так как ты его сам потом не разбереш.
Используй лучше Prepared Statements и база выполнит твой запрос довольно быстро http://php.net/manual/en/pdo.prepared-statements.php
Спустя 2 часа, 40 минут, 15 секунд (14.12.2010 - 20:48) sergeiss написал(а):
Вообще, в любом SQL можно это сделать одним запросом... Только надо чуть-чуть подумать и чуть-чуть "покнопать" Посредством триггеров всё решается достаточно быстро. Естественно, имеет смысл заморачиваться, если постоянно делаются такие апдейты, а не разово.
А в MySQL, так вообще этот механимз "стандартный"... Почему никто не предложил использовать ON DUPLICATE KEY UPDATE? В Постргре такого нету, там надо самому делать через триггер (что несложно, вобщем-то). А в MySQL используйте стандартные средства!
А в MySQL, так вообще этот механимз "стандартный"... Почему никто не предложил использовать ON DUPLICATE KEY UPDATE? В Постргре такого нету, там надо самому делать через триггер (что несложно, вобщем-то). А в MySQL используйте стандартные средства!
_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."
Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar