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

Тема в разделе "Базы данных", создана пользователем verfaa, 2 сен 2013.

Статус темы:
Закрыта.
Модераторы: latteo
  1. verfaa

    verfaa

    Регистр.:
    29 янв 2007
    Сообщения:
    375
    Симпатии:
    41
    Поле 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-запросах?
     
  2. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    890
    Симпатии:
    558
    раз первый работает, то значит есть оператор) Иф(условие, если тру, если не тру)
    Тут вопрос к самому запросу- что за ИНСЕРТ с WHERE ? :eek:
     
    Шумадан нравится это.
  3. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.728
    Симпатии:
    2.105
    + SET в инсерте :eek: ( по крайней мере я такого никогда не использовал)
    http://phpclub.ru/mysql/doc/insert.html

    просто зачем вставка и чего вставка, что мешает написать также (как и предыдущий UPDATE), но с использованием другого поля?
     
    Последнее редактирование: 3 сен 2013
  4. esche

    esche

    Регистр.:
    9 авг 2009
    Сообщения:
    359
    Симпатии:
    243
    SET в INSERT - нормально.. (см второй вариант http://dev.mysql.com/doc/refman/5.5/en/insert.html )
    А вот 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`
     
    BDSG и Шумадан нравится это.
Статус темы:
Закрыта.