Выборка c условием по дате в mysql БД через PHP

Выборка c условием по дате в mysql БД через PHP

Одной из самой сложной работы в php считаю запросы в mysql по дате. Во-первых, не всегда логически просто понять что нужно выбрать если у нас сложные условия, типа: выбрать все даты из БД, которые больше такого-то отрезка времени, но меньше текущей даты увеличенной на 25 дней. Во-вторых, возникают другие проблемы от формата до самих запросов.

Начнем с формата хранения даты в БД

Вспомните тип поля timestamp, у него формат времени такой: гггг-мм-дд чч:мм:сс, например: 2017-11-05 14:23:05. Рекомендую использовать в своих базах именно этот формат, т.к. это стандарт. За счет него можно будет выгружать только время или дату, или одновременно то и другое. Не обязательно тип поля брать timestamp, можно использовать обычный text.

Примеры mysql запросов

Теперь рассмотрим практические примеры выборок по дате с учетом того, что дата записана в формате гггг-мм-дд чч:мм:сс:

1. Выбираем все записи в диапазоне: дата в БД < текущей
select * from ruefz_jcomments where DATE(date) <= 'CURDATE()

2. Выбираем данные за текущий месяц: дата в БД > от 1 числа этого месяца и дата < 1 числа следующего месяца
select id from tab where date > LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH and date < DATE_ADD(LAST_DAY(CURDATE()), INTERVAL 1 DAY)
Расшифровка: выбрать все id записи, в которых дата > последний день месяца сегодняшней даты + 1 день - 1 месяц и дата < последний день месяца сегодняшней даты + 1 день

3. Выбираем данные за текущий месяц, год и день не учитывается (%c месяц 1-12, %e дни 1-31 в mysql; n - месяц 1-12, j дни 1-31 в PHP )
select id from tab where DATE_FORMAT(date, '%c')='".date('n')."'

4. За текущую неделю
select id from tab where date > DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE()) -1) DAY) and date < DATE_ADD(CURDATE(), INTERVAL (9 - DAYOFWEEK(CURDATE())) DAY)

5. выбираем все записи в диапазоне: (текущая - 10 дней) < дата в БД < текущая дата
select * from ruefz_jcomments where DATE(date) <= NOW() AND date >= DATE_SUB(NOW(), INTERVAL 10 DAY)

По этим примерам вам будет понятно, как составлять свои решения. Зачастую, при работе с датами вам потребуется использовать запросы DATE_ADD – прибавление, DATE_SUB - вычитание, CURDATE() - сегодняшняя дата, NOW() - сегодняшняя дата и время.

Изменить формат вывода времени в mysql

Если из БД надо взять дату в другом формате, мы можем изменить ее на "лету", для обработки на php скриптах:

DATE_FORMAT(date,format) - Форматирует величину date в соответствии со строкой format.

Пример:
$result = mysql_query("SELECT DATE_FORMAT('1997-10-04 22:23:01', '%d.%m.%Y %H:%i:%S') AS datess FROM csv");
while ($row=mysql_fetch_array($result)) {
echo $row["datess"]."<br>"; }//05.11.2017 14:23:55

В последнем примере мы приводим дату из БД в читаемый вид для пользователя.

 

| | Выборка c условием по дате в mysql БД через PHP | Одной из самой сложной работы в php считаю запросы в mysql по дате. Во-первых, не всегда логически просто понять что нужно выбрать если у нас сложные | http://blogprogram.ru/wp-content/uploads/2017/12/855-131x131.jpg

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>