апдейт неизвестного поля, которое равно нужному значению

zaartix

Новичок
апдейт неизвестного поля, которое равно нужному значению

Вот такая проблемка, есть таблица из 5 полей:
base1, base2, base3, base4, base5
все поля int

в пределах одной записи значения полей не могут совпадать.

Вопрос: как апдетнуть все поля, равные значению, скажем 4.

Средствами пхп это делается просто:
[sql]
select * from table where base1=4 or base2=4 or base3=4 or base5=4;
[/sql]
потом забираем ассоциативный массив и определяем какое-же из полей равно 4, дальше его апдейтим в нужное значение.

А можно это одним запросом сделать?
Думается, что задача решается через функции mysql - ELT и FIELD, но чета пока не соображу как.
 

zaartix

Новичок
Ну и как-же сделать такой апдейт? Я знаю синтаксис update, но не знаю как ему сказать обновить одно из полей, значение которого 4 к примеру.
 

Dagdamor

Новичок
А если пятью запросами?

UPDATE table SET base1=5 WHERE base1=4;
UPDATE table SET base2=5 WHERE base2=4;
UPDATE table SET base3=5 WHERE base3=4;
UPDATE table SET base4=5 WHERE base4=4;
UPDATE table SET base5=5 WHERE base5=4;

По-моему, это именно то, чего ты хочешь...
 

zaartix

Новичок
что-то все-равно не получается:
[sql]
update exchange_log set
IF(base2=4,'base2', if(base3=4,'base3', IF(base4=4,'base4', if(base5=4,'base5',null))))=0
where base2=4 or base3=4 or base4=4 or base5=4
[/sql]

Dagdamor
ну можно и 5 запросов, это тоже как вариант сойдет, но все-таки хочется чтоб максимально быстро работало, т.к. неизвестно какая нагрузка будет на эту часть.

-~{}~ 15.01.06 22:47:

Где у update можно применять if? я в мануале не нашел
 

alpine

Новичок
zaartix
Лучше серия UPDATE-ов.
C IF-фом так:
SET `field`=IF(`field`=4, some_value, `field`)
На скорость надо потестить, вроде разница должна быть небольшая.
 

Popoff

popoff.donetsk.ua
ну можно и 5 запросов, это тоже как вариант сойдет, но все-таки хочется чтоб максимально быстро работало, т.к. неизвестно какая нагрузка будет на эту часть.
а ты померяй на большой базе - может оказаться, пять запросов будет быстрее :)

-~{}~ 15.01.06 21:50:

На скорость надо потестить, вроде разница должна быть небольшая.
Ускорение от пяти запросов будет ровно в пять раз меньше, чем ускорение от введения индексов. :)
 

alpine

Новичок
Popoff
Ускорение от пяти запросов будет ровно в пять раз меньше, чем ускорение от введения индексов. :)
Ты тестил? Ровно в пять?

-~{}~ 15.01.06 22:46:

Индекс ускоряет поиск по условию WHERE но он так же замедляет INSERT и UPDATE.
 

bkonst

.. хочется странного?...
... желание сделать такой запрос говорит о том, что со структурой базы что-то не так ....
 
Сверху