Я пытаюсь сделать запрос, но после нескольких часов попыток я не могу понять, что это правильно. То, что я пытаюсь сделать, – это показать 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);
Однако это не работает. Любые слова совета?
Я хотел бы использовать методы 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