J'essaie de sélectionner différents prix d'un produit en fonction de la quantité choisie par l'utilisateur. Voici la requête sur laquelle je travaille (il y a une erreur de syntaxe):
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;
Vous avez ce que vous avez utilisé dans les procédures stockées comme ceci pour référence, mais elles ne sont pas destinées à être utilisées comme vous l'avez maintenant. Vous pouvez utiliser IF
comme indiqué par duskwuff
. Mais une déclaration Case
est préférable pour les yeux. Comme ça:
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;
Cela semble plus propre. Je suppose que vous n’avez pas besoin de l’intérieur SELECT
de toute façon ..
IF()
dans MySQL est une fonction ternaire, pas une structure de contrôle. Si la condition du premier argument est vraie, elle renvoie le deuxième argument. sinon, il retourne le troisième argument. Il n'y a pas de fonction ELSEIF()
ni de mot clé END IF
correspondants.
L'équivalent le plus proche de ce que vous avez serait quelque chose comme:
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_3, price_4, 1)
)
)
)
Les conditions n’ont pas toutes un sens pour moi (il semble que certaines d’entre elles pourraient être inversées par inadvertance?), Mais sans savoir ce que vous essayez exactement d’accomplir, il m’est difficile de résoudre ce problème.
J'ai trouvé un bogue dans MySQL 5.1.72 lors de l'utilisation des fonctions if () imbriquées ... La valeur des variables de colonne (par exemple, qty_1) est vide à l'intérieur du second if (), ce qui la rend inutile. Utilisez plutôt la construction suivante:
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
Pour ta question:
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;
Vous pouvez utiliser la structure de contrôle if - else
ou la fonction IF
dans MySQL.
Référence:
http://easysolutionweb.com/sql-pl-sql/how-to-use-if-and-else-in-mysql/
Selon la réponse de Nawfal, les déclarations IF doivent figurer dans une procédure. J'ai trouvé cet article qui montre un exemple brillant d'utilisation de votre script dans une procédure tout en développant et en testant. Fondamentalement, vous créez, appelez puis supprimez la procédure: