2012-01-06 44 views
59

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

Qualcosa di simile a questo:

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

Poi giù nel mio allineamento dovrei essere in grado di fare questo:

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

risposta

109

Probabilmente si desidera utilizzare a CASE expression.

Essi simile a questa:

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 dove il caso è supponiamo di andare nella query, tuttavia non sono riuscito a farlo funzionare correttamente: "SELECT *, N.id (CASO QUANDO (N.action == 2 E N.stato == 0) THEN 1 ELSE 0 END) AS N.state FROM notifiche N, messaggi P WHERE N.userID = '$ session' AND N.uniqueID = P.id AND P.state = '0' AND N.action = '1' ORDINA PER N. data DESC " –

+1

@DylanCross Sembra che manchi una virgola tra' N.id' e '(CASE WHEN ...' –

+1

Ahh, non l'ho visto, ma anche quando ho messo la virgola non funziona –

13

Siete alla ricerca di case:

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

MySQL ha una sintassi if (if(action=2 and state=0, 1, 0)), ma case è m minerale universale.

Si noti che il as state c'è solo aliasing della colonna. Presumo che questo sia nella lista delle colonne della tua query SQL.

+0

Questa è una risposta molto meglio – bretterer

18

è necessario scrivere in SQL non è C/PHP stile

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'uso in stored procedure o funzioni

+0

Non riesco a farlo funzionare con il mio codice, forse il mio il 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, messaggi P WHERE N.userID = '$ sessione 'AND N.uniqueID = P.id AND P.state =' 0 'AND N.action =' 1 'ORDINA PER N. data DESC –

10
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 stessa ....

+0

una cosa che ho notato ma non ho trovato documentazione su di esso è che l'IF deve essere l'ultimo nella lista delle colonne. Se è il primo, allora dà un errore. Qualcuno sa dove vedere questo nella documentazione? Mi sta facendo diventare pazzo. Quando scopro qualcosa, mi piace vederlo documentato per riferimento futuro – carinlynchin

0

secondo il manuale di riferimento MySQL questo la sintassi di utilizzo if e else statement:

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

Quindi per quanto riguarda la vostra richiesta:

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

oppure è possibile utilizzare

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

C'è 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 per favore assicurati che la tua risposta sia utile senza di essa: [aggiungi contesto intorno al link] (// meta.stackexchange.com/a/8259) in modo che i tuoi utenti abbiano un'idea di cosa sia e perché è lì, quindi cita la parte più pertinente della pagina a cui stai collegando nel caso in cui la pagina di destinazione non sia disponibile. [Le risposte che sono poco più di un collegamento possono essere cancellate.] (// stackoverflow.com/help/deleted-answers) –

+1

Sono nuovo in questo. Grazie – user2613580