Авторизация







Регистрация / Забыли пароль?

Регистрация нового пользователя











< Назад

Восстановление пароля





< Назад

Добро пожаловать

Выход


Ежедневное обновление статей и уроков, будь в курсе, держи руку на пульсе событий!

Главная >> PHP

Выборка записей за текущий и прошлый месяц SQL


Зачастую при работе с базами данных, нам требует показать записи за предыдущий отрезок времени, за прошлый месяц или неделю например. О том как это реализовать в MySql, мы рассмотрим ниже.

    И так, чтобы это реализовать, наше поле с датой, должно быть формата datetime. Пример: есть таблица заказов – order в ней есть поле datetime - типа DATETIME, поле - сумма заказа, тип INT. 
 
    И нам нужно узнать количество и сумму заказов за сегодняшний день, за прошлый месяц, и за предыдущий месяц.

    Начнем с выборки объектов за сегодняшний день:

SELECT COUNT(1) FROM `order` WHERE `datetime` >= CURDATE()

    Остановимся подробнее на некоторых моментах. COUNT(1) вернет нам число - количество записей в нашей выборке. 
    Функция CURDATE() - возвращает сегодняшнюю дату. 
    Соответственно, наше условие на русском языке звучит так - " Выбери количество записей в таблице order, которые удовлетворяют условию - их поле datetime больше, чем текущая дата". Сравнение в пределах типа DATETIME абсолютно корректно с точки зрения MySQL.

    Количество заказов за текущий месяц

SELECT COUNT(1) FROM `order` WHERE 
MONTH(`datetime`) = MONTH(NOW()) 
AND YEAR(`datetime`) = YEAR(NOW())

    Немного усложним наш SQL запрос. 

  • функция MONTH() возвращает номер месяца;
  • функция YEAR() возвращает год;
  • функция NOW() возвращает текущие дату и время. 

    Соответственно, в данном SQL запросе мы сравниваем, равен ли текущий месяц MONTH(NOW()) месяцу заказа И равен ли текущий год году, в котором был сделан заказ. SQL запрос для подсчета общей суммы заказов практически идентичен и выглядит так:

SELECT SUM(`total_price`) FROM `order` WHERE 
MONTH(`datetime`) = MONTH(NOW())
AND YEAR(`datetime`) = YEAR(NOW())

    функция SUM() выполнит суммирование поля total_price (общая сумма заказа) всех записей за текущий месяц и вернет единственное число - общая сумма заказов за текущий месяц.

    Несмотря на то, что запрос выше полностью удовлетворяет нашей задаче, он не оптимален.
    Оптимальный SQL запрос в данном случае будет выглядеть так:

SELECT COUNT(1) FROM `order` WHERE 
`datetime` > LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH
 AND `datetime` < DATE_ADD(LAST_DAY(CURDATE()), INTERVAL 1 DAY) 

    Функция LAST_DAY() возвращает дату, смещенную на последний день месяца.
    Соответственно, конструкция LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH вернет нам первый день текущего месяца.
    В итоге, наше условие сводится к виду "вернуть все записи, в которых дата больше, чем первый день текущего месяца, но меньше, чем первый день следующего месяца".

    Количество заказов за предыдущий месяц

SELECT COUNT(1) FROM `order` WHERE 
`datetime` > LAST_DAY( DATE_SUB( CURDATE( ) , INTERVAL 2 MONTH ) ) + INTERVAL 1 DAY 
AND  `datetime` < DATE_ADD( LAST_DAY( CURDATE( ) - INTERVAL 1 MONTH ) , INTERVAL 1 DAY )

    У нас появилась новая функция работы с датами - DATE_SUB().
    Она занимается тем, что "вычитает" из одной даты (переданной первой) другую.

    К сожалению, урок подошёл к концу, но уже завтра появится новый и очень интересный.

    P.S. Сегодня мы научились извлекать из базы данных MySql записи за сегодняшний день, текущий и прошлый месяц.

    Материал взят из http://hedint.ru. И представлен исключительно в ознакомительных целях.


Дата публикации: 04.02.2013
Опубликовал: Сергей Кашурин
Просмотров: 3577
Правила перепечатки

Правила перепечатки

Уважаемый посетитель сайта!
Ниже преведены условия использования и перепечатки материалов сайта /
Все материалы данного сайта подготовлены для Вас лично мной.

Большая часть материалов сайта - это авторские уроки, остальные, это переводы уроков с английского языка на русский.
Если Вы решили использовать материалы данного сайта где-то на своих ресурсах или в рассылке, то соблюдайте следующие требования:
1. Урок или статья должны перепечатываться «как есть» с сохранением всех ссылок на источник урока, а если это перевод, то и на сайт, авторы которого подготовили его.
2. Ссылки на сайт источника и переводчика обязательно должны быть работоспособными (при нажатии по ссылке человек должен перейти на сайт автора/переводчика). Если Вы перепечатали какой-либо документ, обязательно проверьте ссылку на работоспособность.
3. Искажение информации об авторе, источнике, переводчике при перепечатке материалов запрещено!
4. Содержание урока или статьи при перепечатке не должно подвергаться модификациям и переделке. Все уроки и статьи, размещенные на сайте, должны перепечатываться как есть. Вы не имеете права урезать, исправлять или иным образом коверкать републикуемый документ.
С уважением, Сергей Кашурин– владелец сайта /


100 бесплатных PSD элементов для веб-дизайна и мобильных устройств.
Всем привет! Давайте сегодняшний день сделаем исключением, и вместо урока, посмотрим очень классные PSD заготовки для веб-сайтов и мобильных приложений которые вы сможете бесплатно скачать!
BARAJA - jQuery плагин создающий великолепные информационные карточки на вашем сайте, экономя драгоценное место
Благодаря этому плагину, элементы могут располагаться как карты в виде стопки, раскладываясь перед нами оригинальным способом. Добавьте к элементам небольшой текст и уникальный рисунок, примените оригинальный эффект преобразования, и ваша страничка преобразится на глазах.
arcticModal - простые модальные окна jQuery
В поисках простого плагина для создания модальных окон, я перепробовал кучу вариантов, наткнувшись на arcticModal я остановился. Простота работы, вес самого плагина меня очень порадовали, поэтому поделюсь с вами я именно им, так как сам его проверял.
Скачать игры фильмы программы бесплатно
В поисках простого плагина для создания модальных окон, я перепробовал кучу вариантов, наткнувшись на arcticModal я остановился. Простота работы, вес самого плагина меня очень порадовали, поэтому поделюсь с вами я именно им, так как сам его проверял.
Система подключения
В поисках простого плагина для создания модальных окон, я перепробовал кучу вариантов, наткнувшись на arcticModal я остановился. Простота работы, вес самого плагина меня очень порадовали, поэтому поделюсь с вами я именно им, так как сам его проверял.
Wilson Audio, Lamm, Crystal Cables в России - дистрибьюторская. История Wilson Audio - ULTIMA .
В поисках простого плагина для создания модальных окон, я перепробовал кучу вариантов, наткнувшись на arcticModal я остановился. Простота работы, вес самого плагина меня очень порадовали, поэтому поделюсь с вами я именно им, так как сам его проверял.

Уроки и статьи

«Найден Самый Дешевый и Эффективный Способ Рекламы в Интернете!»

Доказанo: ведение своей почтовой рассылки - это самый действенный и дешевый метод рекламы в Интернете.

Используете ли Вы его?

Если нет, то Вы давно теряете свои деньги! Если да, то пришло время вести Вашу почтовую рассылку на самом эффективном инструменте в Рунете - сервисе рассылок SmartResponder.ru

Узнать об этом подробнее >>

Быть в курсе всех событий: