Intereting Posts
создание таблицы умножения с использованием php Создание формы из запроса mysql_fetch_array как сохранить флажок после обновления страницы Проверьте, существует ли многомерный массив «run-time» Как получить все имена таблиц и столбцов из базы данных в Yii Framework ACF – отображать изображение из пользовательской темы Что такое параметризованный запрос? Создание глобального объекта MySQLi Paypal выражает «краткое описание заказа» Вернуть первый ключ ассоциативного массива в PHP Создайте ObjectID объекта MongoDB с даты в прошлом с помощью драйвера PHP Сохраняются ли постоянные переменные в php по запросам? Как создать общий шаблон с верхним и нижним колонтитулом для проектов phalcon с помощью Volt Engine Проблема phpMyAdmin с конкретной таблицей не может редактировать ошибки строк с помощью команды blank where PHP Перенаправление пользователя и продолжение сценария процесса

Показать ближайший результат до текущей даты и времени (MySQL и PHP)

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

мои столбцы выглядят так:

date time 1364399654 15:00 1364684400 16:00 1367272800 12:00 

мой PHP выглядит так:

 $timestamp_now = strtotime(date('dm-Y')); //Creates a timestamp of the currect date $time_now = date('H:i'); $sql = mysql_query('SELECT * FROM table_name ORDER BY date ASC, time ASC (WHERE date > '.$timestamp_now.') AND (time > "'.$time_now.'") LIMIT 1') or die(mysql_error()); $data = mysql_fetch_array($sql); 

Однако это не работает. Любые слова совета?

Related of "Показать ближайший результат до текущей даты и времени (MySQL и PHP)"

Я хотел бы использовать методы PHP date / time и полагаться на MySQL, давая запрос, который выглядит как

 SELECT * FROM table_name WHERE date > CURRENT_DATE OR ( date = CURRENT_DATE AND time > CURRENT_TIME ) ORDER BY date ASC, time ASC LIMIT 1 

OR гарантирует, что он получит правильные записи, иначе часть TIME будет блокироваться, т. Е. Результат в 03:00 со следующего дня после появления, если текущее время было в 06:00

Я вижу, что вы используете значения timestamp, чтобы вы всегда могли передавать число PHP вместо числа CURRENT_DATE. Это даст окончательный сценарий

 $timestamp_now = strtotime(date('dm-Y')); //Creates a timestamp of the currect date $sql = mysql_query('SELECT * FROM table_name WHERE date > '.$timestamp_now.' OR ( date = '.$timestamp_now.' AND time > CURRENT_TIME ) ORDER BY date ASC, time ASC LIMIT 1') or die(mysql_error()); $data = mysql_fetch_array($sql); 

Я бы посоветовал рассмотреть возможность изменения базы данных, если возможно, сохранить ее как поле MySQL DATETIME, так как тогда вы можете изменить этот запрос на просто WHERE datetime > NOW() , но это полностью зависит от вас. Просто всегда считал, что обработка дат MySQL более логична, чем PHP.

Вы должны использовать еще один тест:

  • DATE(date) > CURDATE() : если это завтра или позже
  • DATE(date) = CURDATE() AND time > TIME(NOW()) : это сегодня, но позже

Полный код:

 $sql = mysql_query('SELECT * FROM table_name WHERE DATE(date) > CURDATE() OR (DATE(date) = CURDATE() AND time > TIME(NOW())) ORDER BY date ASC, time ASC LIMIT 1' ) or die(mysql_error()); $data = mysql_fetch_array($sql); 

Обратите внимание, что вы используете временную метку в своем поле date . Временная метка включает дату и время, поэтому, возможно, вы сможете использовать этот запрос:

 SELECT * FROM table_name WHERE date > NOW() ORDER BY date ASC LIMIT 1 

Я верю, что вам нужно получить SQL, структурированный с WHERE, до ORDER BY.

 SELECT * FROM table WHERE (date>$now) and (time>$now) ORDER BY date,time LIMIT 1