Hi,

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


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
Optie 1: zorg altijd dat de data die je database in gaat correct is ('garbage in = garbage out').

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:

SELECT velden
FROM tabellen
WHERE betaaldatum <= '2011-08-19' 
  AND betaaldatum <> '0000-00-00'; 
Is BETWEEN niet beter?
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
- 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

[quote="- 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.

[/quote]

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

Dan zal je dus moeten controleren op basis van welke 'garbage' waarde die geselecteerd worden en ook die waardes uitsluiten.

Echt super bedankt, het is eindelijk gelukt! :D Heel erg bedankt Erwin :)

Oplossing:

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

Reageren