Есть ячейки в таблице с названием is_main При выборке возвращает три строки со значениями id1 is_main=1 id2 is_main=0 id1 is_main=1 Как одним запросом обновить значения у id 1 поставить один.. а остальные поставить 0..?
наверное можно сделать логическое выражение типа SET is_main=(id=1), не? я не пробовал, мне задача кажется нелепой если что, в реляционныъ базах нет понятия "первая строка". а если вам надо привязаться к определенному значению поля, то какбы нелепо это выражать целой колонкой нулей в другой колонке.
задача в том чтобы обновить из всех значений только первому 1 остальным 0. легко решается двумя запросами: update products set is_main='0' where pid=$x; update products set is_main='1' where pid=$x limit 1; хотелось бы одним.
этот запрос проверяет айди и если там стоит 1 ставит 0.. в ином случае 1. тоесть просто меняет наоборот. я правильно понял? а мне нужно чтобы не зависимо от того что стояло до этого.. в первом ставило 1 а дальше все нули.
UPDATE `icms_products_specifications` SET `is_main` = CASE `specification_id` WHEN 1 THEN 0 ELSE 1 END WHERE `products_id` = 2813 конкретный запрос.. с этим products_id в базе сейчас два specification_id у которых is_main = 1 после выполнения затронуто 0 строк Добавлено спустя 43 секунды: Можешь нарисовать? Добавлено спустя 9 минут 12 секунд: Исправил запрос UPDATE `icms_products_specifications` SET `is_main` = CASE WHEN 1 THEN 0 ELSE 1 END WHERE `products_id` = 2813 стояло в обоих 1.. поставило везде 0
$sql = "SET @i:=0; UPDATE icms_products_specifications SET is_main = CASE WHEN ( @i := @i +1 ) = 1 THEN 1 ELSE 0 END WHERE `products_id` = '2813'"; задачу победил самостоятельно...level up!