twee condities in een if statement
Ik heb een twee if statements waar twee voorwaarden inzitten. Maar ik krijg de foutmelding:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ') THEN
Prijs*0.95 as Verlaagd_5
IF(DatumTot='0000-00-00' AND v.NrVertrek=2' at line 2
De code is gemaakt in mysql.
De bedoeling is dat als de datum 0000-00-00 is en vertreknummer = 1 dat er dan 5 procent van de prijs afgaat.
en als de datum 0000-00-00 is en vertreknummer is 2 dan 20 procent van de prijs afgaat.
de code is:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
SELECT vp.DatumTot, vp.Prijs,
IF(DatumTot='0000-00-00' AND v.NrVertrek=1) THEN
Prijs*0.95 as Verlaagd_5
IF(DatumTot='0000-00-00' AND v.NrVertrek=2) THEN
Prijs*0.80 as Verlaagd_20
end IF
FROM prijs vp, voertuig v;
IF(DatumTot='0000-00-00' AND v.NrVertrek=1) THEN
Prijs*0.95 as Verlaagd_5
IF(DatumTot='0000-00-00' AND v.NrVertrek=2) THEN
Prijs*0.80 as Verlaagd_20
end IF
FROM prijs vp, voertuig v;
kan iemand mij helpen?
Je zou eerst kunnen controleren of DatumTot gelijk is aan '0000-00-00' en vervolgens v.NrVertrek. Indien deze kolom enkel de waarde 1 of 2 kan hebben is dit natuurlijk niet zo lastig (indien deze waarde niet 1 is, impliceert dit in dat geval dat de waarde 2 is).
Wel lijkt het mij verstandig om rekening te houden met situaties waarin deze condities niet opgaan - zijn Verlaagd_5 en Verlaagd_20 dan ongedefinieerd?
zou je een voorbeeld script willen geven?
SELECT vp.DatumTot, vp.Prijs,
IF(DatumTot='0000-00-00' AND v.NrVertrek=1) THEN
Prijs*0.95 as Verlaagd_5
elseIF(DatumTot='0000-00-00' AND v.NrVertrek=2) THEN
Prijs*0.80 as Verlaagd_20
end IF
FROM prijs vp, voertuig v;
In het geval van een verlaagd tarief, zou je dus niet afzonderlijk ofwel een Verlaagd_5 of een Verlaagd_20 in je resultset krijgen, maar zou ik gaan voor Verlaagd.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
SELECT vp.DatumTot, vp.Prijs,
IF(DatumTot = '00' AND v.NrVertrek=1)
THEN
Prijs*.95
ELSEIF(DatumTot='0000-00-00' AND v.NrVertrek=2) THEN
Prijs * 0.80
END IF AS Verlaagd
FROM prijs
IF(DatumTot = '00' AND v.NrVertrek=1)
THEN
Prijs*.95
ELSEIF(DatumTot='0000-00-00' AND v.NrVertrek=2) THEN
Prijs * 0.80
END IF AS Verlaagd
FROM prijs
Waarbij in het geval de datum niet 00000 is (raar formaat, waarom niet NULL?)
Verlaagd NULL zal zijn, tenzij je nog een ELSE toevoegd
of
Code (php)
1
2
3
4
5
6
2
3
4
5
6
SELECT vp.DatumTot, vp.Prijs,
(DatumTot='0000-00-00') * (v.NrVertrek=1) * 0.95 * Prijs
+
(DatumTot='0000-00-00') * (v.NrVertrek=2)* 0.80 * Prijs
AS Verlaagd
FROM prijs vp
(DatumTot='0000-00-00') * (v.NrVertrek=1) * 0.95 * Prijs
+
(DatumTot='0000-00-00') * (v.NrVertrek=2)* 0.80 * Prijs
AS Verlaagd
FROM prijs vp
Waarbij dan gebruik gemaakt wordt van TRUE is gelijk aan 1
dus als x gelijk is aan 10 dan:
(x = 10) * (x = 20) komt overeen met (1) * (0)