web-dev-qa-db-fra.com

Comment écrire une instruction IF ELSE dans une requête MySQL

Comment écrire une instruction IF ELSE dans une requête MySQL?

Quelque chose comme ça:

mysql_query("...(irrelevant code).. IF(action==2&&state==0){state=1}");

Ensuite, dans mon tableau, je devrais pouvoir faire ceci:

 $row['state'] 
//this should equal 1, the query should not change anything in the database, 
//just the variable for returning the information
79
Dylan Cross

Vous voudrez probablement utiliser une expression CASE .

Ils ressemblent à ceci:

SELECT col1, col2, (case when (action = 2 and state = 0) 
 THEN
      1 
 ELSE
      0 
 END)
 as state from tbl1;
143
Jack Edmonds

vous devez l'écrire en SQL pas le style C/PHP

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

pour une utilisation dans la requête

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

pour une utilisation dans des procédures ou des fonctions stockées

27
SergeS

Vous recherchez case:

case when action = 2 and state = 0 then 1 else 0 end as state

MySQL a une syntaxe if (if(action=2 and state=0, 1, 0)), mais case est plus universel.

Notez que le as state il alias simplement la colonne. Je suppose que cela se trouve dans la liste des colonnes de votre requête SQL.

15
Eric
SELECT col1, col2, IF( action = 2 AND state = 0, 1, 0 ) AS state from tbl1;

OR

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

les deux résultats seront les mêmes ....

14
Khandad Niazi

selon le manuel de référence de MySQL, cette syntaxe consiste à utiliser l'instruction if et else:

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

Donc, concernant votre requête:

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

ou vous pouvez utiliser

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

Il y a un bon exemple dans ce lien: http://easysolutionweb.com/sql-pl-sql/how-to-use-if-and-else-in-mysql/

6
Dilraj Singh