"$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());"
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 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.
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.
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'