Ich versuche, unterschiedliche Preise für ein Produkt basierend auf der vom Benutzer ausgewählten Menge auszuwählen. Dies ist die Abfrage, an der ich arbeite (sie hat einen Syntaxfehler):
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
Ivan Bravo Carlos
quelle
quelle
Antworten:
Sie haben das, was Sie in gespeicherten Prozeduren wie dieser verwendet haben, als Referenz, aber sie sind nicht dazu gedacht, wie jetzt verwendet zu werden. Sie können
IF
wie gezeigt verwendenduskwuff
. Aber eineCase
Aussage ist besser für die Augen. So was: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;
Das sieht sauberer aus. Ich nehme an, du brauchst
SELECT
sowieso nicht das Innere .quelle
IF()
in MySQL ist eine ternäre Funktion, keine Kontrollstruktur - wenn die Bedingung im ersten Argument wahr ist, wird das zweite Argument zurückgegeben; Andernfalls wird das dritte Argument zurückgegeben. Es gibt keine entsprechendeELSEIF()
Funktion oder ein entsprechendesEND IF
Schlüsselwort.Das nächste Äquivalent zu dem, was Sie haben, wäre etwa:
Die Bedingungen sind für mich nicht alle sinnvoll (es sieht so aus, als ob einige von ihnen versehentlich umgekehrt werden könnten?), Aber ohne zu wissen, was genau Sie erreichen wollen, fällt es mir schwer, das zu beheben.
quelle
case when (condition) then {computed value} when then else end
Ich habe in MySQL 5.1.72 einen Fehler gefunden, als ich die verschachtelten if () -Funktionen verwendet habe. Der Wert der Spaltenvariablen (z. B. qty_1) ist innerhalb des zweiten if () leer, was ihn unbrauchbar macht. Verwenden Sie stattdessen das folgende Konstrukt:
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
quelle
Für Ihre Frage:
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;
Sie können die
if - else
Kontrollstruktur oder dieIF
Funktion in MySQL verwenden.Referenz:
http://easysolutionweb.com/sql-pl-sql/how-to-use-if-and-else-in-mysql/
quelle
Gemäß der Antwort von Nawfal müssen sich IF-Anweisungen in einem Verfahren befinden. Ich habe diesen Beitrag gefunden, der ein brillantes Beispiel für die Verwendung Ihres Skripts in einer Prozedur zeigt, während Sie noch entwickeln und testen. Grundsätzlich erstellen Sie, rufen Sie auf und lassen die Prozedur fallen:
https://gist.github.com/jeremyjarrell/6083251
quelle