Datum filteren met VARCHAR veld
Ik heb een Reserveringsysteem. Nu is de bouwer ervan zo slim geweest om een VARCHAR veld te gebruiken in de database voor datum registratie.
Ik wil echter graag dat de pagina alleen reserveringen van vandaag of nieuwer weergeeft.
Wie o wie kan mij helpen?
IK heb hier even onvoldoende kennis van.
Screen 1
Screen 2
Screen 3
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date
Dit zou volgens mij moeten werken:
SELECT * FROM reserveringen WHERE STR_TO_DATE(datum, "%d-%m-%Y") >= NOW()
Robbert, google is your friend: Dit zou volgens mij moeten werken:
SELECT * FROM reserveringen WHERE STR_TO_DATE(datum, "%d-%m-%Y") >= NOW()
Gewijzigd op 27/11/2015 08:40:10 door Jan de Laet
Eens kijken of dit wel helpt :)
Toevoeging op 27/11/2015 08:45:23:
Helaas krijg een witte pagina
Even een tijdelijke kolom aanmaken: `datum_new` oid die wel DATE is.
Dan voer je deze query uit:
UPDATE reserveringen SET datum_new = STR_TO_DATE(datum, "%d-%m-%Y");
Daarna verwijder je de kolom `datum` (als datum_new goed is!).
En hernoem je `datum_new` naar `datum`
Ja heb ik ook al aan zitten denken, weet alleen niet of dat problemen gaat opleveren verder.
Als je netjes een DATETIME kolom gebruikt en NOW() in je queries gebruikt, zou het geen kwaad kunnen.
De insert- en updatequery's zullen datums als 31-12-2015 proberen aan te leveren.
Die zul je dus op moeten sporen.
Daarnaast is er grote kans dat er op veel plekken iets als echo $row->datum staat.
Daar krijg je na de aanpassing dan de datum als 2015-12-31 te zien.
En mogelijk is er nog code waarbij met bijvoorbeeld substr() gepoogd wordt om de maand bijvoorbeeld uit de datum te vissen.
goed zoeken in de betrokken scripts naar "datum" dus
Aangezien ik 2x een <wiebertje> zie
Mogelijk zit het in gebruik van ' en " quotes in je sql.
PHP Maarten op 27/11/2015 09:11:33:
Hoe zit het eigenlijk met je charachter encoding met de database?
Aangezien ik 2x een <wiebertje> zie
Aangezien ik 2x een <wiebertje> zie
Waar?
Toevoeging op 27/11/2015 09:22:26:
Jan de Laet op 27/11/2015 09:16:36:
Robert, ivm je witte pagina: dat betekent een fout, set error reporting eens aan.
Mogelijk zit het in gebruik van ' en " quotes in je sql.
Mogelijk zit het in gebruik van ' en " quotes in je sql.
Normaal geeft die errors al aan. Ik ben een beetje leek als het om sql gaat. PHP red ik me wel mee.
Gewijzigd op 27/11/2015 09:23:42 door Robbert Tromp
Robbert, laat de code met je sql eens zien zoals deze nu is
"$result = mysql_query("SELECT * FROM `reserveringen` ORDER BY datum, uur, lokaal DESC" and "SELECT * FROM reserveringen WHERE STR_TO_DATE(datum, "%d-%m-%Y") >= NOW()") or die(mysql_error());"
Als dat goed gelukt is kan je daarna gewoon zonder STR_TO_DATE verder, omdat alle data dan in het juiste type staan.
Toevoeging op 27/11/2015 10:22:15:
En type direct omzetten naar DATE geeft vast problemen
Gewijzigd op 27/11/2015 10:19:56 door Robbert Tromp
Daarom ook de overstap naar een tijdelijk veld.
Offtopic:
Ik sloeg voeger ook de tijden als VARCHAR op, maar zonder een goed formaat aan te houden. Heeft enkele uren geduurd voordat ik alles recht kreeg naar DATETIME. Wel met een semi-automatisch script gelukkig ;-)
Gewijzigd op 27/11/2015 10:28:29 door - Ariën -
"$result = mysql_query("SELECT * FROM `reserveringen` WHERE STR_TO_DATE(datum, "%d-%m-%Y") = NOW()") or die(mysql_error());"
Ik zou sowieso wel van de MySQL-functies afstappen omdat deze verouderd zijn, en bij voorkeur de MySQLi-functies gebruiken.
Je wilt waarschijnlijk >= NOW() gebruiken, kijkend naar je 1e vraag (vandaag of nieuwer).
Dat zou er toe kunnen leiden dat je database eerste alle 31285 records in je database af moet om de string naar een date om te zetten, om vervolgens te kijken of er aan de voorwaarde > now() voldaan wordt.
Met een DATE is idie vergelijking gemakkelijker.
Houd verder rekening met de querycache. Gebruik je in een query nondeterministic functies zoals NOW(), DATE(NOW()) of CURDATE(), dan moeten deze steeds worden geëvalueerd en kan de querycache niet worden gebruikt:
Met een literal value kan de querycache wél worden gebruikt, dus dit is een situatie waarin je vaak beter PHP de datum kunt laten invullen. Vooral als je dit doet met de huidige datum, kan na het uitvoeren van de query gedurende de rest van de dag de querycache veelvuldig worden benut: