Come scrivere l'istruzione IF ELSE in una query MySQL


86

Come si scrive un'istruzione IF ELSE in una query MySQL?

Qualcosa come questo:

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

Quindi nel mio array dovrei essere in grado di farlo:

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

Risposte:


150

Probabilmente vorrai usare CASEun'espressione .

Sembrano così:

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

1
Grazie, la tua risposta è sembrata la più facile da seguire, (per quanto riguarda il caso si supponga di andare nella query, tuttavia non sono riuscito a farlo funzionare correttamente: "SELECT *, N.id (CASE WHEN (N. action == 2 AND N.state == 0) THEN 1 ELSE 0 END) AS N.state FROM notifiche N, post P WHERE N.userID = '$ session' AND N.uniqueID = P.id AND P.state = "0" AND N.action = "1" ORDER BY N.date DESC "
Dylan Cross

2
@DylanCross Sembra che ti manchi una virgola tra N.ide(CASE WHEN ...
Jack Edmonds

1
Ahh, non l'ho visto, ma anche quando metto la virgola non funziona.
Dylan Cross

@DylanCross Potrebbe anche essere necessario passare AS N.statea AS state.
Jack Edmonds

8
@DylanCross MySQL non usa =invece che ==per il confronto?
Jack Edmonds

28

devi scriverlo in SQL non in stile C / PHP

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

per l'uso nella query

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

per l'utilizzo in stored procedure o funzioni


Non riesco a farlo funzionare con il mio codice, forse il mio posizionamento è sbagliato o qualcosa del genere: SELECT *, N.id IF (N.action = 2 AND N.state = 0, 1, 0) AS N.state FROM notifiche N, post P WHERE N.userID = '$ session' AND N.uniqueID = P.id AND P.state = '0' AND N.action = '1' ORDER BY N.date DESC
Dylan Cross

15

Stai cercando case:

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

MySQL ha una ifsintassi ( if(action=2 and state=0, 1, 0)), ma caseè più universale.

Nota che as statec'è solo un alias per la colonna. Presumo che questo sia nell'elenco delle colonne della tua query SQL.


Questa è una risposta molto migliore
bretterer

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

O

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

entrambi i risultati saranno uguali ....


una cosa che ho notato ma non sono riuscito a trovare la documentazione è che l'IF deve essere l'ultimo nell'elenco delle colonne. Se è il primo, dà un errore. Qualcuno sa dove vederlo nella documentazione? Mi sta facendo diventare pazzo. Quando scopro qualcosa, mi piace vederlo documentato per riferimento futuro
carinlynchin

8

secondo il manuale di riferimento di mySQL questa è la sintassi dell'uso dell'istruzione if e else:

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

Quindi per quanto riguarda la tua domanda:

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

oppure puoi usare

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

C'è un buon esempio in questo link: http://easysolutionweb.com/sql-pl-sql/how-to-use-if-and-else-in-mysql/


2
Un collegamento a una soluzione è il benvenuto, ma assicurati che la tua risposta sia utile senza di essa: aggiungi un contesto attorno al collegamento in modo che i tuoi colleghi utenti abbiano un'idea di cosa sia e perché sia ​​lì, quindi cita la parte più pertinente della pagina che tu " re collegamento a nel caso in cui la pagina di destinazione non è disponibile. Le risposte che sono poco più di un collegamento possono essere eliminate.
MAR
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.