Como escrever se outra declaração em uma consulta MySQL

como é que escrevo uma declaração IF ELSE numa consulta MySQL?

Algo do género:
mysql_query("...(irrelevant code).. IF(action==2&&state==0){state=1}");

então, lá em baixo na minha matriz eu devo ser capaz de fazer isto:

 $row['state'] 
//this should equal 1, the query should not change anything in the database, 
//just the variable for returning the information
Author: Eric Leschinski, 2012-01-06

5 answers

Provavelmente queres usar um CASE expressão .

Eles são assim:

SELECT col1, col2, (case when (action = 2 and state = 0) 
 THEN
      1 
 ELSE
      0 
 END)
 as state from tbl1;
 128
Author: Jack Edmonds, 2014-09-15 11:59:33

Você deve escrevê-lo em SQL não no estilo C / PHP

IF( action = 2 AND state = 0, 1, 0 ) AS state

Para utilização na consulta

IF ( action = 2 AND state = 0 ) THEN SET state = 1

Para utilização em procedimentos ou funções armazenados

 20
Author: SergeS, 2012-01-06 19:31:46
Estás à procura case:
case when action = 2 and state = 0 then 1 else 0 end as state

O MySQL tem uma sintaxe if (if(action=2 and state=0, 1, 0)), mas case é mais universal.

Note que o as state está aliando a coluna. Presumo que isto esteja na lista de colunas da sua consulta SQL.

 14
Author: Eric, 2012-01-06 19:29:49
SELECT col1, col2, IF( action = 2 AND state = 0, 1, 0 ) AS state from tbl1;

Ou

SELECT col1, col2, (case when (action = 2 and state = 0) then 1 else 0 end) as state from tbl1;

Ambos os resultados serão iguais....

 12
Author: Khandad Niazi, 2014-01-21 13:38:01

De acordo com o manual de referência mySQL esta é a sintaxe de usar a instrução if e else:

IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list] ...
[ELSE statement_list]
END IF

Então, em relação à tua pergunta:

x = IF((action=2)&&(state=0),1,2);

Ou pode utilizar

IF ((action=2)&&(state=0)) then 
state = 1;
ELSE 
state = 2;
END IF;

Há um bom exemplo neste link : http://easysolutionweb.com/sql-pl-sql/how-to-use-if-and-else-in-mysql/

 -1
Author: user2613580, 2017-02-25 12:54:48