joTunkiq спомена нещо за работа с дати, но дори той не ти го обясни правилно.
В MySQL, както и в (повечето) (SQL) сървъри за бази от данни, има цяла група от типове на полета, които служат за работа с дати. Отделно от това, имат и "вградени" (native) функции за работа с дати - изчисления, търсене на периоди и т.н.
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-types.html
http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html
След като ти записваш датата в БД, в горепосочения формат, ясно е, че не използваш подобен тип поле, а най-вероятно използваш тип за текст (char, varchar). Не зависимо, че вътре си записал дата, от гледна точка на MySQL това е някакъв текст. Няма как да търсиш по даден период, няма как да сортираш (с някой изключения).
Моя съвет е да промениш полето "date" да бъде от тип DATE. Едва тогава ще можеш да търсиш по период. Внимавай докато правиш промяната, да не изгубиш вече записаните дати!
Ето един план как да го направиш безопастно:
Стъпка 1 - разделителя, който изплозваш в датата - : е неподходящ, защото всъщност е стандартен разделител за време, не за дата, първо трябва да го променим:
[sql]update music set `date` = replace(`date`, ":", ".");[/sql]
Стъпка 2 - форматиране. Сега вече може да използваме някой от date функциите, за да форматираме правилно. В резултат, датата ще бъде преобразувана във вида: ГГГГ-ММ-ДД
[sql]update music set `date` = str_to_date(`date`, get_format(DATE, 'EUR'));[/sql]
Стърка 3 - промяна на типа на полето. В случая, на теб ти трябва датата като година, месец, ден, следователно DATE е достатъчно:
[sql]alter table music change `date` `date` DATE;[/sql]
Сега вече можеш да търсиш по периоди, например песните, които са най-популярни за последния един месец:
[sql]
select * from music where ok='1' and `date` > DATE_SUB(NOW(), INTERVAL 1 MONTH) ORDER BY `views` DESC LIMIT 10;
[/sql]
Песните от последните три дни:
[sql]
select * from music where ok='1' and `date` > DATE_SUB(NOW(), INTERVAL 3 DAY) ORDER BY `views` DESC LIMIT 10;
[/sql]
Какво още трябва да промениш:
1. Начина, по който записваш датите, когато вкарваш нов запис.
2. Начина, по който показваш датата пред потребителя. Това форматиране може да го направи както MySQL като част от SELECT заявката, така и през РНР, избора е твой.
[sql]
select *, DATE_FORMAT(`date`, '%d.%m.%Y') as formatted_date from music
[/sql]
или със PHP
PHP:
date('d.m.Y', strtotime($result['date']));
Между другото, името което си избрал за това поле е малко объркващо, можеш да го промениш и него.
Много от тук пишещите, записват датата във формата, в който трябва да я покажат на потребителя. Между формата в който записвате, и формата в който показвате една дата, няма нищо общо. Записвайте датите във формата, в който сървъра за бази от данни, да знае каква е тази информация и как да работи с нея. Това е и формата, чрез който Вие ще можете да я използвате правилно - търсене, сортиране и т.н.
Форматирането на данните за показване пред потребителя е нещо съвсем различно, отделна тема. И не е никакъв проблем да форматирате една дата по какъвто си искате начин. Но е голям проблем, ако датата не е записана правилно.