2012-01-06 28 views
59

¿Cómo se escribe una instrucción IF ELSE en una consulta MySQL?¿Cómo se escribe la instrucción IF ELSE en una consulta MySQL?

Algo como esto:

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

luego hacia abajo en mi arsenal que debería ser capaz de hacer esto:

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

Respuesta

109

es probable que desee utilizar almacenados a CASE expression.

Se vería así:

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

Gracias, su respuesta parece ser más fácil de seguir, (en lo que respecta al caso) se supone que debe ir en la consulta, sin embargo no he podido hacer que funcione correctamente: "SELECT *, N.id (CASO CUANDO (N.action == 2 AND N.state == 0) ENTONCES 1 OTRA 0 END) como N. state FROM notificaciones N, posts P WHERE N.userID = '$ session' Y N.uniqueID = P.id AND P.state = '0' Y N.action = '1' ORDER BY N.date DESC " –

+1

@DylanCross Parece que le falta una coma entre' N.id' y '(CASE WHEN ...' –

+1

Ahh, no vi eso, pero incluso cuando puse la coma, no funciona. –

13

Usted está buscando case:

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

MySQL tiene una sintaxis if (if(action=2 and state=0, 1, 0)), pero case es m mineral universal

Tenga en cuenta que el as state solo hay aliasing la columna. Supongo que esto está en la lista de columnas de su consulta SQL.

+0

Esta es una respuesta mucho mejor – bretterer

18

se debe escribir en SQL no es C/PHP estilo

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

para su uso en la consulta

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

para su uso en procedimientos o funciones

+0

No puedo hacer que esto funcione con mi código, tal vez mi la ubicación es incorrecta, o algo así: SELECT *, N.id IF (N.action = 2 AND N.state = 0, 1, 0) AS N. state DE notificaciones N, posts P WHERE N.userID = '$ session 'AND N.uniqueID = P.id AND P.state =' 0 'Y N.action =' 1 'ORDER BY N.date 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; 

ambos resultados misma ....

+0

Una cosa que noté pero no encontré documentación es que el IF debe ser el último en la lista de columnas. Si es primero, entonces da un error. ¿Alguien sabe dónde ver esto en la documentación? Me esta volviendo loco. Cuando descubro algo, me gustaría verlo documentado para referencia futura – carinlynchin

0

acuerdo con el manual de referencia de MySQL esta la sintaxis de utilizar instrucción if y else:

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

lo tanto con respecto a su consulta:

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

o puede utilizar

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

Hay buen ejemplo en este enlace: http://easysolutionweb.com/sql-pl-sql/how-to-use-if-and-else-in-mysql/

+2

Un enlace a una solución es bienvenido, pero asegúrese de que su respuesta sea útil sin él: [agregue contexto alrededor del enlace] (// meta.stackexchange.com/a/8259) para que los demás usuarios tengan una idea de qué es y por qué está allí, luego cite la parte más relevante de la página a la que se está vinculando en caso de que la página de destino no esté disponible. [Las respuestas que son poco más que un enlace se pueden eliminar.] (// stackoverflow.com/help/deleted-answers) –

+1

Soy nuevo en esto. Gracias – user2613580