2012-01-06 5 views
59

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 ceci:

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

Puis dans mon tableau je devrais être en mesure de le faire:

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

Répondre

109

Vous voulez probablement utiliser un CASE expression.

Ils ressemblent à ceci:

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

Merci, votre réponse a semblé la plus facile à suivre, (pour autant que le cas est supposé aller dans la requête, mais j'ai été incapable de l'obtenir pour fonctionner correctement: "SELECT *, N.id (CASE QUAND (N.action == 2 ET N.state == 0) ALORS 1 AUTRE 0 END) AS N.state FROM notifications N, messages P WHERE N.userID = '$ session' ET N.uniqueID = P.id ET P.state = '0' AND N.action = '1' ORDRE PAR N.date DESC " –

+1

@DylanCross On dirait que vous pourriez manquer une virgule entre' N.id' et '(CASE WHEN ...' –

+1

Ahh, je ne l'ai pas vu, mais même quand je mets la virgule ça ne marche pas –

13

Vous cherchez 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 m minerai universel.

Notez que le as state alias juste la colonne. Je suppose que c'est dans la liste des colonnes de votre requête SQL.

+0

Ceci est une bien meilleure réponse – bretterer

18

vous devez écrire dans SQL pas C/le style 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 stockées ou fonctions

+0

Je suis incapable de faire fonctionner ceci avec mon code, peut-être mon L'emplacement est incorrect ou quelque chose comme: SELECT *, N.id IF (N.action = 2 ET N.state = 0, 1, 0) AS N.state FROM notifications N, messages P WHERE N.userID = '$ session 'AND N.uniqueID = P.id ET P.state =' 0 'AND N.action =' 1 'ORDRE PAR N.date DESC –

10
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; 

les résultats seront même ....

+0

une chose que j'ai remarquée mais que je n'ai pas pu trouver de documentation est que l'IF doit être le dernier dans la liste des colonnes. Si c'est le premier, alors ça donne une erreur. Quelqu'un sait où voir cela dans la documentation? Ça me rend fou. Quand je découvre quelque chose, j'aime le voir documenté pour référence future – carinlynchin

0

selon le manuel de référence mySQL ce la syntaxe d'utilisation si et sinon déclaration:

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

donc au sujet de 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 est un bon exemple dans ce lien: http://easysolutionweb.com/sql-pl-sql/how-to-use-if-and-else-in-mysql/

+2

Un lien vers une solution est le bienvenu, mais s'il vous plaît assurez-vous que votre réponse est utile sans cela: [ajouter le contexte autour du lien] (// meta.stackexchange.com/a/8259) afin que les autres utilisateurs aient une idée de ce que c'est et de la raison pour laquelle il existe, puis citez la partie la plus pertinente de la page que vous liez au cas où la page cible ne serait pas disponible. [Réponses qui sont un peu plus d'un lien peut être supprimé.] (// stackoverflow.com/help/deleted-answers) –

+1

Je suis nouveau dans ce domaine. Merci – user2613580

Questions connexes