Hallo,

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
"$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());"
Ik zou de queries niet met elkaar combineren, maar eerst eenmalig de UPDATE-query van Eddy uitvoeren met het tijdelijke veld.

Als dat goed gelukt is kan je daarna gewoon zonder STR_TO_DATE verder, omdat alle data dan in het juiste type staan.
Ja misschien wel zo slim Arien kost t wat meer tijd maar dan heb ik wel de juiste informatie.

[size=xsmall]Toevoeging op 27/11/2015 10:22:15:[/size]

En type direct omzetten naar DATE geeft vast problemen
Jep, ongeldige formaat data wordt als 0000-00-00 opgeslagen namelijk.
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 ;-)[/offtopic]
Dat zou wel de beste oplossing zijn dan, maar het moet toch ook gewoon mogelijk zijn met

"$result = mysql_query("SELECT * FROM `reserveringen` WHERE STR_TO_DATE(datum, "%d-%m-%Y") = NOW()") or die(mysql_error());"
Dat zou naar mijn idee moeten kunnen.
Ik zou sowieso wel van de MySQL-functies afstappen omdat deze verouderd zijn, en bij voorkeur de MySQLi-functies gebruiken.
Met = NOW() zie je alleen de reserveringen van vandaag.
Je wilt waarschijnlijk >= NOW() gebruiken, kijkend naar je 1e vraag (vandaag of nieuwer).
STR_TO_DATE(datum, "%d-%m-%Y") = NOW()"

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.
Aangezien je al een uur INT(1) hebt voor het lesuur, zou ik een DATE gebruiken voor de datum. Een DATETIME of TIMESTAMP voegt dan niets toe.

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:


SELECT ...
  FROM reserveringen 
 WHERE datum >= CURDATE()


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:


SELECT ...
  FROM reserveringen 
 WHERE datum >= '2015-11-27'

Reageren