twee condities in een if statement

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Maichel H

Maichel H

16/05/2017 14:32:55
Quote Anchor link
Hallo,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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;


kan iemand mij helpen?
 
PHP hulp

PHP hulp

15/11/2024 20:24:32
 
Thomas van den Heuvel

Thomas van den Heuvel

16/05/2017 18:07:27
Quote Anchor link
Elk IF-statement heeft een END IF nodig, als je IF-statements wilt combineren zul je dit met een ELSE moeten doen.

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?
 
Maichel H

Maichel H

16/05/2017 20:01:57
Quote Anchor link
ok, ik begrijp niet helemaal hoe je dit voor ogen ziet: "Elk IF-statement heeft een END IF nodig, als je IF-statements wilt combineren zul je dit met een ELSE moeten doen"

zou je een voorbeeld script willen geven?
 
Jan te Pas

Jan te Pas

16/05/2017 21:13:34
Quote Anchor link
Kijk even. De vorm is: If then elseif then en if


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;
 
Ivo P

Ivo P

17/05/2017 11:26:40
Quote Anchor link
volgens mij is de syntax:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
SELECT IF(a > 10) THEN 10 ELSE 0 END IF AS dewaarde
FROM ...


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)
PHP script in nieuw venster Selecteer het PHP script
1
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


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)
PHP script in nieuw venster Selecteer het PHP script
1
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


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)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.