Php mysql select по дате

PHP Select Where Date Equals DateTime

I have a website where posts are recorded in a MySQL Table with an Added value, which is set to DateTime. An example of a stored value is 2016:12:12 15:30:21 . So I now want to build a page which selects all records of a certain date, using a php script and URL paramater like added.php?date=2016-12-12 . So my php script for this would be:

$rows_sql mt24 mb12">
    phpmysqldatedatetime
)" data-controller="se-share-sheet" data-se-share-sheet-title="Share a link to this question" data-se-share-sheet-subtitle="" data-se-share-sheet-post-type="question" data-se-share-sheet-social="facebook twitter devto" data-se-share-sheet-location="1" data-se-share-sheet-license-url="https%3a%2f%2fcreativecommons.org%2flicenses%2fby-sa%2f3.0%2f" data-se-share-sheet-license-name="CC BY-SA 3.0" data-s-popover-placement="bottom-start">Share
)" title="">Improve this question
)">edited Dec 15, 2016 at 18:45
Al Foиce ѫ
4,18512 gold badges39 silver badges49 bronze badges
asked Dec 12, 2016 at 15:34
4
    Are you asking for help querying the database with this date? Your PHP doesn't really do much of anything. Can you post the relevant parts of whatever file $site_url is supposed to reference?
    – WillardSolutions
    Dec 12, 2016 at 15:37
    Have you checked your error logs?
    – Jay Blanchard
    Dec 12, 2016 at 15:38
    Beside missing the closing quotes ("), this query will work. You should post the actual code where you send it to the database however.
    – colburton
    Dec 12, 2016 at 15:38
    if $date= 2016-12-12, you have to select all the values that are bigger than: 2016-12-12 00:00:00 and smaller than 2016-12-12 23:59:59 or something.
    – Loko
    Dec 12, 2016 at 15:39
Add a comment|

2 Answers 2

Reset to default
1

Can you please change your query line as below:

$rows_sql mt24">
)" data-controller="se-share-sheet" data-se-share-sheet-title="Share a link to this answer" data-se-share-sheet-subtitle="" data-se-share-sheet-post-type="answer" data-se-share-sheet-social="facebook twitter devto" data-se-share-sheet-location="2" data-se-share-sheet-license-url="https%3a%2f%2fcreativecommons.org%2flicenses%2fby-sa%2f3.0%2f" data-se-share-sheet-license-name="CC BY-SA 3.0" data-s-popover-placement="bottom-start">Share
)" title="">Improve this answer
answered Dec 12, 2016 at 15:41
1
    A simple and effective solution. Thank you
    – W D
    Dec 12, 2016 at 15:51
Add a comment|
0

There are few things that you need to be aware of:

Your code is vurenable to SQL Injection.

You need to provide date in proper format. To do so I suggest using DateTime::createFromFormat function or strtotime. Let's do it with simplier way (strtotime)

else

Basicly it checks whether string can be converted to timestamp strtotime function and if it is possible (NOT FALSE) it will convert it with the format that DB can handle YYYY-mm-dd hh:mm:ss Often if you want to select from some time period then using operators like > < and BETWEEN may come handy. For example if you want to select the rows from whole day specified in GET date parameter

 if($date = strtotime($_GET['date']))

Источник

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

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

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

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

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

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

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

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) = 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"]."
"; >//05.11.2017 14:23:55

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

Источник

Фильтрация по полю DateTime в MySQL

Хранение данных в базе MySQL довольно часто сопряжено с полями, которые хранят значения времени и временные метки. Для этих целей в MySQL существуют несколько форматов даты и времени которые могут храниться в полях таблиц.

Давайте перечислим основные поля, используемые для хранения значений времени:

DATE – тип поля который хранит дату в формате ГГГГ-ММ-ДД;
DATETIME – поле этого типа хранит дату и время, в формате ГГГГ-ММ-ДД ЧЧ:ММ:CC;
TIMESTAMP – временная метка, формат хранения зависит от версии MySQL, и режима работы сервера баз данных.

Как правило, TIMESTAMP представляет некоторое числовое значение, которое удобно использовать при фильтрации полей, традиционными операторами сравнения. Что касается формата DATETIME, то здесь уже операция фильтрации выполняется немного иначе. Давайте рассмотрим простые примеры, как можно фильтровать записи, если у вас таблица хранит данные времени в формате DATETIME.

Фильтрация по дате в формате DateTime

В качестве задачи, мы рассмотрим пример выборки записей, до определённой даты, пусть это будет 24.05.2020. Для этого чтобы применить фильтрацию к полю DateTime мы воспользуемся функцией DATE():

SELECT * FROM m_table WHERE DATE(add_date) < '2020-05-24'

Данный запрос сделает выборку данных из таблицы m_table, выбирая записи, у которых значение даты в поле add_date не превышает указанное в условии. Либо аналогичным образом можно отфильтровать записи, у которых значение поле add_date больше указанной даты:

SELECT * FROM m_table WHERE DATE(add_date) > '2020-05-24'

Как вы можете заметить, поменялся только лишь оператор сравнения.

Фильтрация по диапазону значений DateTime

Теперь давайте рассмотрим пример с фильтрацией по диапазону. Для фильтрации мы будем использовать начальную и конечную дату. Таким образом, мы сделаем выборку записей из таблицы, соответствующие заданному диапазону:

SELECT * FROM m_table WHERE DATE(add_date) BETWEEN '2020-04-01' AND '2020-05-01'

Команда BETWEEN в запросе как раз указывает на то, что в условии будет использоваться диапазон значений.

Фильтрация по диапазону значений DateTime с временными интервалами

Нередко приходится выбирать данные с использованием интервалов времени, которые могут меняться динамически. Так к примеру, мы можем выбрать записи двухнедельной давности, а также записей, дата которых больше текущей на некоторое значение.

SELECT * FROM m_table WHERE DATE(add_date) BETWEEN DATE(CURRENT_DATE() - INTERVAL 2 WEEK) AND DATE(CURRENT_DATE() + INTERVAL 4 DAY)

Опять же, здесь задействованы такие функции как DATE(), CURRENT_DATE(), а как же команды временного интервала INTERVAL. MySQL позволяет выполнять математические операции с датами, оперируя вместе с этими функциями. Так можно увеличивать или уменьшать некоторые временные значения в запросе, динамически, в зависимости от текущего значения времени.

Функции для работы с датой и временем в MySQL

В таблицы приведён список функций, которые могут быть использованы в запросах MySQL. Этих часть этих функций бывает достаточно чтобы сформировать запросы практически с любым условием выборки данных.

Функция Описание
ADDDATE() Добавление даты
ADDTIME() Добавление времени
CONVERT_TZ() Конвертация из одной временной зоны в другую
CURDATE() Получение текущей даты
CURTIME() Получение текущего системного времени
DATE_ADD() Добавление одной даты к другой
MySQL DATE_FORMAT () Приведение даты к определённому формату
DATE() Получение даты из даты или выражения дата-время
DATEDIFF() Вычитание одной даты из другой
DAYNAME() Получение названия дня недели
DAYOFMONTH() Получения дня месяца (1-31)
DAYOFWEEK() Получение индекса дня недели из аргумента
DAYOFYEAR() Получение дня года (1-366)
EXTRACT Получение части даты
FROM_DAYS() Преобразование номер дня в дату
FROM_UNIXTIME() Преобразование даты в формате UNIX в дату
MySQL DATE_SUB () Вычитание одной даты из другой
HOUR() Получение часа
LAST_DAY Получение последнего дня месяца для аргумента
MAKEDATE() Создание даты из года и дня года
MAKETIME () Получение значения времени
MICROSECOND() Получение миллисекунды из аргумента
MINUTE() Получение минуты из аргумента
MONTH() Получение месяца из переданной даты
MONTHNAME() Получение названия месяца
NOW() Получение текущей даты и времени
PERIOD_ADD() Добавление интервала к месяцу-году
PERIOD_DIFF() Получение количества месяцев между двумя периодами
QUARTER() Получение четверти часа из переданной даты в качестве аргумента
SEC_TO_TIME() Конвертация секунды в формат ‘ЧЧ:MM:СС’.
SECOND() Получение секунды (0-59)
MySQL STR_TO_DATE () Преобразование строки в дату
SUBTIME() Вычитание времени
SYSDATE() Получение времени, в момент которого была выполнена функция
TIME_FORMAT() Установка формата времени
TIME_TO_SEC() Получение аргумента, преобразованного в секунды
TIME() Получение части времени из выражения, передаваемого в качестве аргумента
TIMEDIFF() Вычитание времени
TIMESTAMP() Получение даты или выражения дата-время если используется один аргумент. С двумя аргументами возвращается их сумма
TIMESTAMPADD() Добавление интервала к дате-времени
TIMESTAMPDIFF() Вычитание интервала из даты-времени
TO_DAYS() Получение аргумента даты, преобразованный в дни
UNIX_TIMESTAMP() Получение даты-времени в формате UNIX, в формат, допускаемый в MySQL
UTC_DATE() Получение текущей даты в UTC
UTC_TIME() Получение текущего времени в UTC
UTC_TIMESTAMP() Получение текущей даты-времени в UTC
WEEK() Получение номера недели
WEEKDAY() Получение индекса дня недели
WEEKOFYEAR() Получение календарной недели даты (1-53)
YEAR() Получение года
YEARWEEK() Получение года и недели

VK FB TW Whatsapp Telegram Email

Источник

Читайте также:  Python desktop application example
Оцените статью