[MYSQL] Использование if в запросах

Тема в разделе "Базы данных", создана пользователем RedRabbit, 11 сен 2016.

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

    RedRabbit

    Регистр.:
    11 июл 2008
    Сообщения:
    608
    Симпатии:
    251
    Здравствуйте, как можно использовать оператор if? Нужно сделать одним запросом, но у меня ругается на синтаксис, если использую if.

    Код:
    SELECT .... WHERE ... INTO @var;
    IF (@var IS NULL) 
    SELECT .... WHERE ... INTO @var;
    INSERT .....;
    UPDATE ....;
    END IF
    INSERT INTO .... VALUES ( @var.... );
    
     
  2. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.270
    Симпатии:
    2.280
    Если правильно понял о чём ты:
    Код:
    SELECT
       IF (id IS NULL, 0, id)
    FROM ...
     
  3. RedRabbit

    RedRabbit

    Регистр.:
    11 июл 2008
    Сообщения:
    608
    Симпатии:
    251
    Неа. Логика такая в первом запросе узнаем есть ли переменная @var, далее , если она пуста, то делаем SELECT(тут получаем значение @var) INSERT UPDATE, потом делаем INSERT со значением @var
     
  4. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.270
    Симпатии:
    2.280
    Может такое поможет:
    Код:
    begin
    ...
    if (@var IS NULL) then
    select * from Table1
    else
    select * from Table2;
    end if;
    ...
    end;
     
  5. RedRabbit

    RedRabbit

    Регистр.:
    11 июл 2008
    Сообщения:
    608
    Симпатии:
    251
    Почему ошибка?


    Код:
    begin
    SET @var='1';
    if (@var IS NOT NULL) then
    select @var:=@var+1;
    end if;
    select @var;
    end;
     
  6. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.270
    Симпатии:
    2.280
    RedRabbit нравится это.
  7. RedRabbit

    RedRabbit

    Регистр.:
    11 июл 2008
    Сообщения:
    608
    Симпатии:
    251
    Помогло, спасибо, только почему if работает только в процедурах и функциях.....:dead:
     
  8. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.582
    Симпатии:
    1.484
    В селектах он тоже работает, но иначе:
    PHP:
    SELECT IF(1>3,'true','false'); // удобная логика для выборки полей по условию
    Для той логики что хотите возможно подойдёт костыль на основе CASE и подзапросов
    PHP:
    SELECT CASE 1 WHEN 1 THEN 'this is case one'  
    WHEN 2 THEN 'this is case two'   
    ELSE 'this is not in the case'  
    END as 'how to execute case statement';   
    но я точно не уверен.

    Еще может пригодится логика On duplicate key update - но там тоже свои приколы (великий гугл поможет).

    А вообще процедуры самое оно для задачи в первом посте.
     
    RedRabbit нравится это.
Статус темы:
Закрыта.