В SQL есть тернарный оператор?

Статус
В этой теме нельзя размещать новые ответы.

verfaa

Профессор
Регистрация
29 Янв 2007
Сообщения
416
Реакции
49
Поле visible может хранить либо 0 либо 1 (тип enum)
В скрипте обнаружил такой SQL запрос, который работает
Код:
UPDATE users SET visible = if(visible='1', '0', '1') WHERE id='".intval($id)."'

Мне нужно написать похожий запрос для другого поля, которое также может хранить либо 0 либо 1 (тип enum)
только вместе с ON DUPLICATE KEY UPDATE.
Я написал
Код:
INSERT INTO user_settings SET a_disabled = if(a_disabled='1', '0', '1') WHERE id_user='".intval($user_id)."'
           ON DUPLICATE KEY UPDATE a_disabled = if(a_disabled='1', '0', '1')
Но он уже не работает. Где ошибка и как использовать тернарный оператор в MySQL-запросах?
 
раз первый работает, то значит есть оператор) Иф(условие, если тру, если не тру)
Тут вопрос к самому запросу- что за ИНСЕРТ с WHERE ? :eek:
 
раз первый работает, то значит есть оператор) Иф(условие, если тру, если не тру)
Тут вопрос к самому запросу- что за ИНСЕРТ с WHERE ? :eek:
+ SET в инсерте :eek: ( по крайней мере я такого никогда не использовал)
Для просмотра ссылки Войди или Зарегистрируйся

просто зачем вставка и чего вставка, что мешает написать также (как и предыдущий UPDATE), но с использованием другого поля?
 
Последнее редактирование:
+ SET в инсерте :eek: ( по крайней мере я такого никогда не использовал)
SET в INSERT - нормально.. (см второй вариант Для просмотра ссылки Войди или Зарегистрируйся )
А вот INSERT + WHERE - так-так-так не бывает (с)

verfaa, если структура таблицы (id_user, a_disabled), то запрос должен выглядеть примерно так:
В $a_disabled при этом должно быть значение, если пользователь ещё не добавлен в таблицу.. 0 или 1 в зависимости от логики.
Код:
INSERT INTO user_settings SET `id_user`='".intval($user_id)."', `a_disabled` = '".$a_disabled."' 
          ON DUPLICATE KEY UPDATE `a_disabled` =1-`a_disabled`
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху