Van en TOT
Voor een klant ben ik een script aan het maken. Maar ik heb 2 date time velden en nu wil ik dat je bijvoorbeeld in 2 inputs datums kan invullen en dan zoekt hij de facturen tussen die 2 datums. Dat heb ik nu.
Maar zodra ik bijvoorbeeld dit doe:
Van: 2011-08-12
Tot: 2011-08-19
Dan krijg ik o.a resultaten van 2013 etc, maar wat me wel opvalt is dat de foute resultaten wel in 1 van de 2 date velden een 0000-00-00 als value hebben.
Wie weet hoe ik dit kan oplossen.
Query
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT
sl.factuurnummer,
sl.factuur_datum_betaald,
sl.factuurdatum,
sl.factuur_omschrijving,
sl.factuur_ex_btw_bedrag,
sl.factuur_btw_bedrag,
sl.factuur_incl_btw_bedrag,
sc.naam,
sc.project_id
FROM factuur sl, projecten_adressen sc
WHERE sl.id_klant = sc.id
AND sc.verwijderd = 0
AND factuurdatum >= '".$mysql->escape($_SESSION['van'])."' AND factuur_datum_betaald <= '".$mysql->escape($_SESSION['tot'])."'
ORDER BY sc.naam
sl.factuurnummer,
sl.factuur_datum_betaald,
sl.factuurdatum,
sl.factuur_omschrijving,
sl.factuur_ex_btw_bedrag,
sl.factuur_btw_bedrag,
sl.factuur_incl_btw_bedrag,
sc.naam,
sc.project_id
FROM factuur sl, projecten_adressen sc
WHERE sl.id_klant = sc.id
AND sc.verwijderd = 0
AND factuurdatum >= '".$mysql->escape($_SESSION['van'])."' AND factuur_datum_betaald <= '".$mysql->escape($_SESSION['tot'])."'
ORDER BY sc.naam
Indien je echter '0000-00-00' acceptabel vindt vanwege andere randvoorwaarden, dan zal je in je query die opties moeten gaan uitsluiten. Je zal dus in je query zoiets moeten doen:
Is BETWEEN niet beter?
Als ik nu dit invul:
2011-08-11
2011-08-19
Dan krijg ik nog resultaten van:
2011-09-20
2011-03-23
- SanThe - op 22/04/2013 18:31:35:
Is BETWEEN niet beter?
Normaal gesproken zou dat beter zijn, maar hier wordt gecheckt op appels > x en peren < y, en dat valt niet met een between te doen.
Willem vp op 22/04/2013 18:45:43:
Normaal gesproken zou dat beter zijn, maar hier wordt gecheckt op appels > x en peren < y, en dat valt niet met een between te doen.
- SanThe - op 22/04/2013 18:31:35:
Is BETWEEN niet beter?
Normaal gesproken zou dat beter zijn, maar hier wordt gecheckt op appels > x en peren < y, en dat valt niet met een between te doen.
Thanks, dat had ik nog niet door eigenlijk. Beetje vluchtig gekeken.
Shahiem Seymor op 22/04/2013 18:45:41:
Het werkt bijna,
Als ik nu dit invul:
2011-08-11
2011-08-19
Dan krijg ik nog resultaten van:
2011-09-20
2011-03-23
Als ik nu dit invul:
2011-08-11
2011-08-19
Dan krijg ik nog resultaten van:
2011-09-20
2011-03-23
Dan zal je dus moeten controleren op basis van welke 'garbage' waarde die geselecteerd worden en ook die waardes uitsluiten.
Oplossing:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
sl.factuurnummer,
sl.factuur_datum_betaald,
sl.factuurdatum,
sl.factuur_omschrijving,
sl.factuur_ex_btw_bedrag,
sl.factuur_btw_bedrag,
sl.factuur_incl_btw_bedrag,
sc.naam,
sc.project_id
FROM factuur sl, projecten_adressen sc
WHERE sl.id_klant = sc.id
AND sc.verwijderd = 0
AND sl.factuurdatum >= '".$mysql->escape($_SESSION['van'])."' AND sl.factuur_datum_betaald <= '".$mysql->escape($_SESSION['tot'])."'
AND sl.factuur_datum_betaald >= '".$mysql->escape($_SESSION['van'])."' AND sl.factuurdatum <= '".$mysql->escape($_SESSION['tot'])."'
AND factuur_datum_betaald <> '0000-00-00'
ORDER BY sc.naam
sl.factuurnummer,
sl.factuur_datum_betaald,
sl.factuurdatum,
sl.factuur_omschrijving,
sl.factuur_ex_btw_bedrag,
sl.factuur_btw_bedrag,
sl.factuur_incl_btw_bedrag,
sc.naam,
sc.project_id
FROM factuur sl, projecten_adressen sc
WHERE sl.id_klant = sc.id
AND sc.verwijderd = 0
AND sl.factuurdatum >= '".$mysql->escape($_SESSION['van'])."' AND sl.factuur_datum_betaald <= '".$mysql->escape($_SESSION['tot'])."'
AND sl.factuur_datum_betaald >= '".$mysql->escape($_SESSION['van'])."' AND sl.factuurdatum <= '".$mysql->escape($_SESSION['tot'])."'
AND factuur_datum_betaald <> '0000-00-00'
ORDER BY sc.naam