Подтвердить что ты не робот

Вывод MYSQL WITHIN IF

Это такой простой вопрос, но я не нашел ответа нигде в течение 2 часов.

Как вы используете статус MYSQL IF. Независимо от того, что я вкладываю в него, это не сработает. В SQL Server это 5-секундное задание.

Нужно ли быть в рамках процедуры?

Можете ли вы использовать SELECT внутри оператора IF?

Здесь действительно не интересуется функцией IF.

Спасибо за любую помощь.

4b9b3361

Ответ 1

Как использовать оператор IF в select

select if(status>0, 'active', 'inactive') as status from users

Да, вы можете использовать select внутри IF

Пример:

select if((select count(*) from versions) > (select count(*) from groups), true, false) as value

Ответ 2

Вы можете выбрать другое поле из одного и того же запроса, но использование запроса выбора может не поддерживаться поскольку запрос может возвращать несколько значений, mysql не поддерживает концепцию строки в столбце.

SELECT IF(`field1`>1,`field2`,`field3`) FROM TABLE1 WHERE 1

здесь field1, field2, field3 - поля в одной таблице

Помогает ли это вам?

Ответ 3

Нужно ли быть в рамках процедуры?

Да, вам нужно быть в процедуре для использования оператора if.

Можете ли вы использовать SELECT внутри оператора IF?

Да, вы можете:

drop procedure if exists sp;

create procedure sp () begin
    if ((select 1 /*from whatever table would work*/)=1) then
        select 'it works';
    end if;
end;

call sp;

drop procedure sp;

Ответ 4

Вы намекали на это в comment, но ни один из ответов здесь не укажет его явно, поэтому я:

В MySQL вы не можете использовать оператор IF вне тела хранимой процедуры. Документация подразумевает это, когда она вводит понятие как "оператор IF для сохраненных программ" (мой акцент).

Насколько я могу судить, нет простого способа контролировать поток выполнения в операциях, выдаваемых в командной строке или через клиента (например, с PHP), за исключением запроса значений, затем переключения потока управления на основе этих значений вне MySQL (т.е. используя инструкцию PHP if вместо MySQL). Я бы с удовольствием исправил это: -)


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

IF x THEN 
  INSERT INTO mytable (mycol)
  VALUES ('foo')
END IF

может стать

INSERT INTO mytable (mycol)
SELECT 'foo'
FROM dual
WHERE x

(согласно этот ответ)


Вы также можете создать, вызвать и затем удалить новую хранимую процедуру:

DELIMITER \\
CREATE PROCEDURE tmpfunc() BEGIN
  IF x THEN 
    INSERT INTO mytable (mycol)
    VALUES ('foo');
  END IF;
END \\
DELIMITER ;
CALL tmpfunc();
DROP PROCEDURE tmpfunc;

(согласно этот ответ)

Ответ 7

MySQL несколько запросов, используя if, иллюстрирует подход, который, вероятно, имеет значение здесь.

Обратите внимание, что я предположил, что этот вопрос задает вопрос: "Как я могу использовать данные из таблицы для прямого потока управления, которые могут изменить какую-то другую часть базы данных?"

Ответ 8

    CASE
        WHEN receiver = '$userid' THEN receiver
        ELSE sender
    END AS contact