Estoy tratando de seleccionar diferentes precios de un producto en función de la cantidad que elija el usuario. Esta es la consulta en la que estoy trabajando (tiene un error de sintaxis):
select id,
(SELECT
IF(qty_1<='23',price,1)
ELSEIF(('23'>qty_1 && qty_2<='23'),price_2,1)
ELSEIF(('23'>qty_2 && qty_3<='23'),price_3,1)
ELSEIF('23'>qty_3,price_4,1)
END IF) as total
from product;
mysql
if-statement
Iván Bravo Carlos
fuente
fuente
Respuestas:
Tiene lo que ha usado en procedimientos almacenados como este como referencia, pero no están diseñados para usarse como lo tiene ahora. Puede utilizar
IF
como se muestra enduskwuff
. Pero unaCase
declaración es mejor para los ojos. Me gusta esto:select id, ( CASE WHEN qty_1 <= '23' THEN price WHEN '23' > qty_1 && qty_2 <= '23' THEN price_2 WHEN '23' > qty_2 && qty_3 <= '23' THEN price_3 WHEN '23' > qty_3 THEN price_4 ELSE 1 END) AS total from product;
Esto parece más limpio. Supongo que no necesitas el interior de
SELECT
todos modos ...fuente
IF()
en MySQL es una función ternaria, no una estructura de control - si la condición en el primer argumento es verdadera, devuelve el segundo argumento; de lo contrario, devuelve el tercer argumento. No hay unaELSEIF()
función oEND IF
palabra clave correspondiente .El equivalente más cercano a lo que tienes sería algo como:
No todas las condiciones tienen sentido para mí (¿parece que algunas de ellas pueden revertirse inadvertidamente?), Pero sin saber exactamente qué está tratando de lograr, es difícil para mí arreglar eso.
fuente
case when (condition) then {computed value} when then else end
Encontré un error en MySQL 5.1.72 al usar las funciones anidadas if () .... el valor de las variables de columna (por ejemplo, qty_1) está en blanco dentro del segundo if (), lo que lo vuelve inútil. En su lugar, utilice la siguiente construcción:
case when qty_1<='23' then price when '23'>qty_1 && qty_2<='23' then price_2 when '23'>qty_2 && qty_3<='23' then price_3 when '23'>qty_3 then price_4 else 1 end
fuente
Para tu pregunta:
SELECT id, IF(qty_1 <= '23', price, IF(('23' > qty_1 && qty_2 <= '23'), price_2, IF(('23' > qty_2 && qty_3 <= '23'), price_3, IF(('23' > qty_2 && qty_3<='23'), price_3, IF('23' > qty_3, price_4, 1))))) as total FROM product;
Puede utilizar la
if - else
estructura de control o laIF
función en MySQL.Referencia:
http://easysolutionweb.com/sql-pl-sql/how-to-use-if-and-else-in-mysql/
fuente
Según la respuesta de Nawfal, las declaraciones IF deben estar en un procedimiento. Encontré esta publicación que muestra un ejemplo brillante de cómo usar su script en un procedimiento mientras aún se desarrolla y prueba. Básicamente, usted crea, llama y luego suelta el procedimiento:
https://gist.github.com/jeremyjarrell/6083251
fuente