Hallo allemaal,
ik ben bezig aan een script voor een agenda, en probeer alles te ordenen op datum met de query:

<?
$query = $query = mysql_query("SELECT * FROM stop_agenda WHERE online='ja' ORDER BY datum DESC");
?>

hij geeft de volgende output:

het type van datum is gewoon VARCHAR

heeft iemand een idee hoe dit zo komt?
Willem van Oort op 06/06/2010 16:56:52

het type van datum is gewoon VARCHAR


Dat is precies het probleem! Gebruik voor een datum het type DATE, alleen dan kun je erop sorteren. Gebruik je het type VARCHAR dan wordt er alfabetisch gesorteerd en is de volgorde dus niet juist...
Dit is toch correct? DESC is sorteren van hoog naar laag. Dat doetie: 9 is hoger dan 1, dus 9 boven aan. Vervolgens komen er 2 1-en, dan kijktie dus naar het 2-de teken, das 9 en 5, dus eerst de 9, dan de 5. Zeer correct gesorteerd. Wat is het probleem :D
@Blanche PHP: dankje, ik zal kijken of dat type wel werkt
@Piet Verhagen: waarom komt 9 dan voor 19?
9 komt voor 19 als je alfabetisch aflopend sorteert. Als je numeriek zou sorteren zou 19 voor 9 komen en hetzelfde geldt als dit onderdeel van een datum zou zijn...
Er staat niet 19. Hij ziet het niet als het getal 19, maar een tekenreeks die met een 1 begint. En een andere tekenreeks begint met een 9. Dat is hoger, dus moet boven de tekenreeks die met en 1 begint. Als er meerdere tekenreeks met hetzelfde teken beginnen, dan pas word er naar het 2-de teken gekeken. Dat is 'alfabetisch' sorteren zoals Blanche PHP dat noemt.

Als je het kolom type veranderd naar DATE snaptie dat het datums zijn en dan gaat het sorteren wel goed. Je kunt dan eventueel ook rekenen met datums in je SQL query's. Of verschillen tussen datum weergeven en dergelijke.

Goed om te weten: de weergave van de datum in phpmyadmin word anders als je het kolom type naar DATE veranderd, namelijk: yyyy-mm-dd. En dat is ook zo als je in je PHP script simpel doet:
SELECT datum FROM table ...

Dat wil je waarschijnlijk niet. Daarom moet je doen
SELECT DATE_FORMAT(datum,'%d-%m-%Y') FROM table ...

of
SELECT UNIX_TIMESTAMP(datum) FROM table ...

In dat laaste geval krijg je een timestamp trug die je in PHP kunt gebruiken om mee verder te spelen bijvoorbeeld met de PHP functie date: http://nl3.php.net/manual/en/function.date.php
oh dankje Piet, ik wilde net gaan vragen hoe ik dd-mm-yyyy kon krijgen en dan geef je het antwoord al! toppie:P
als ik DATE_FORMAT() gebruik in een query, kan ik die query dan alleen gebruiken voor de datum of kan ik dan gewoon ,* neerzetten?

EDIT: de DATE_FORMAT werkt niet... ik heb nu gebruikt:
"SELECT id, wat, DATE_FORMAT(datum, '%d-%m-%Y') FROM stop_agenda WHERE online='ja' ORDER BY datum ASC"

hij laat de hele datum niet zien (helemaal niks dus)
DATE_FORMAT(datum, '%d-%m-%Y')

DATE_FORMAT(datum, '%d-%m-%Y') AS nieuwedatum

Reageren