Подскажите как отсортировать правильно по дате в порядке убывания. Запрос такой: [sql] $news = mysql_query ("SELECT *, DATE_FORMAT(date,'%d.%m.%Y %H:%i') AS date FROM `news` WHERE `kat_news` = $id ORDER BY `date` DESC limit 7",$db); [/sql] Получает, что у меня сортирует по дате только, несмотря н месяц. Например так: 30 августа 2011 29 ноября 2011 28 января 2011 А должно быть так: 29 ноября 2011 30 августа 2011 28 января 2011
Для этого и используют unix время-http://ru.wikipedia.org/wiki/UNIX-время. Если вы пишете свой проект , то лучше переписать под данный метод , если уже много новостей , то всё-равно перепишите и напишите конвертер для существующих новостей. Потратите меньше сил и времени.
siiXth имеет в виду в б.д. формат INT и писать туда то, что возвращает php-функция time() Что касается сортировки по MySQL-дате, то: [sql]SELECT *, DATE_FORMAT(`date`, '%d.%m.%Y %H:%i') AS `date_f` FROM `news` WHERE `kat_news` = $id ORDER BY `date` DESC LIMIT 7;[/sql]
ну и конечно появляются лёгкие способы сравнения дат , вычитания и т.п. в человеко-понятный вид спокойно переводится через date()
независимо от выбранного типа сортироваться будет правильно. выбирая тип задайте себе вопрос "зачем?" если таблица будет читаться только в phpmyadmin, то удобнее использовать родные для MYSQL типы. но обычно все пишется и читается через php, значит наглядное представление даты нах не нужно!!! ты все равно будешь форматировать дату внутри скрипта (шаблона вывода) - значит удобнее оперировать родным для PHP unix time, так меньше бесполезных промежуточных преобразований.
С обычными датами MySQL это делать не сложнее. Сравнивать можно через обычные операторы, для арифметики есть DATE_ADD() и DATE_SUB()...
я малоопытен и потому для меня всегда время было в циферках =) и потому считаю это нормой. просто даже юзеру который незнает что такое часики unix и никогда не работал с датами по бд будет намного проще разобраться в арифметике чем в новых и даже непонятных операторах