MYSQL запрос, сортировка по дате!

Статус
В этой теме нельзя размещать новые ответы.

Acidrayne

Местный житель
Регистрация
30 Сен 2007
Сообщения
296
Реакции
20
Добрый день возник вопрос следующегохарактера!Есть база с записями, дата в таблице записана следующим образом "2009-05-31 или 2009-03-27 короче в таком порядке вначале год потом месяц потом день" скажите как мне вывести все записи с таблицы например за этот месяц? Что мне нужно подставить в WERE ? Может существует какая нибудь более удобная форма для записи даты чтобы можно было ей удобно оперировать?
 
Для хранения времени и(или) даты есть специальные типы поля:
  • datetime
  • date
  • time

А вот как сортировать их за сегодняшний день не скажу... Не знаю... :confused:
 
как вариант:
PHP:
SELECT * FROM `table_name` WHERE `field_name` LIKE "%2009-05%";

Может существует какая нибудь более удобная форма для записи даты чтобы можно было ей удобно оперировать?
ИМХО, более удобно хранить дату в формате unix timestamp.
 
можно еще твой "формат" конвертнуть в человеческий datetime или timestamp
а тогда можно фильтровать как угодно генерируя нужный тебе диапазон дат и запрос делая:
WHERE `field_name` >= STARTDATE AND `field_name` < ENDDATE;
выведет тебе нужные данные из указанного периода
 
примерно так:

where MONTH(date_field) = MONTH(CURRENT_DATE);
 
С этим я разобрался, но просто немного неправильно я все объяснил, вернее объяснил правильно но не совсем то что нужно! Мне нужно в цикле вывести таблицу, например :

-----------------------------------------------------------
дата |user1|user2|user3|user4|
-------------------------------
2009-01| | | | |
--------------------------------------------------------
2009-02| | | | |
--------------------------------------------------------

Например выбераем все данные из таблицы, и потом нужно например в первую строку вывести данные по всем юзерам где месяц равен январю, во второй строке тоже самое но месяц +1! Как лучше всего это релизовать?
 
С этим я разобрался, но просто немного неправильно я все объяснил, вернее объяснил правильно но не совсем то что нужно! Мне нужно в цикле вывести таблицу, например :
-----------------------------------------------------------
дата |user1|user2|user3|user4|
-------------------------------
2009-01| | | | |
--------------------------------------------------------
2009-02| | | | |
--------------------------------------------------------
Например выбераем все данные из таблицы, и потом нужно например в первую строку вывести данные по всем юзерам где месяц равен январю, во второй строке тоже самое но месяц +1! Как лучше всего это релизовать?
тебе нужно свой столбик с датой обозвать типа AS `somename` и в конце отсортировать по нему весь результат т.е. ORDER BY `somename`

те что то типа такого будет у тебя:
SELECT CONCAT(YEAR(date), '-',MONTH(date)) as `somename`, user1, user2, user3 FROM TABLE ORDER BY `somename`;
 
я чаще дату в timestamp integer храню, сортировка на раза два. Только вот форматировать приходится при каждой выборке
 
я чаще дату в timestamp integer храню, сортировка на раза два. Только вот форматировать приходится при каждой выборке
для майскула особой разницы то и нету что сортировать дату или ИНТ, здесь правда он сортирует строку можно оставить просто сортировку по дате, и вот в примере человека скорее всего еще понадобится DISTINCT вокруг функции CONCAT или той которая выводит у него ДАТУ, чтобы убрать дубли - или сделать груп бай. и еще не понятно user1, user2 это столбцы или же это он хочет так обычные строки вывести. обновлённый запрос должен быть типа этого:

SELECT DISTINCT(CONCAT(YEAR(date), '-',MONTH(date))) as `somename`, user1, user2, user3 FROM TABLE ORDER BY `date;

или через груп бай
SELECT CONCAT(YEAR(date), '-',MONTH(date)) as `somename`, user1, user2, user3 FROM TABLE GROUP BY `somename` ORDER BY `date`;
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху