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

В настоящее время я работаю над созданием бейсбольного веб-сайта. На одной стороне страницы я хочу отображать информацию о следующей предстоящей игре. Я использую mysql вер. 5.0.45. Моя таблица построена так:

команда соперника, дата, время, счет

  • Дата указана в формате даты mysql (гггг-мм-дд)
  • Я нашел команду datediff(date1,date2) и безуспешно пытался с ней поэкспериментировать.

Я пробовал такие запросы, как:

SELECT *
FROM schedule
WHERE MIN(DATEDIFF(CURDATE(),date))
  • Но это дает мне ошибку, потому что я неправильно использую функцию MIN()
  • Я все еще довольно новичок в MySQL, и я просто не могу понять это.

person Collin Price    schedule 13.04.2009    source источник


Ответы (5)


Если вы хотите отобразить следующую игру (включая сегодняшнюю), вы можете использовать следующее:

SELECT * FROM `schedule` WHERE `date` >= CURDATE() ORDER BY `date` LIMIT 1;

Если вы хотите отобразить все предстоящие игры, используйте:

SELECT * FROM `schedule` WHERE `date` >= CURDATE() ORDER BY `date`;
person Dave Forgac    schedule 13.04.2009
comment
он не отображает ежемесячно и ежегодно, это означает, что 2015 печатает последнюю строку, а 2016 печатает первую строку даже месяц. - person 151291; 27.11.2015

Я думаю, что это будет что-то вроде этого:

SELECT * FROM `schedule` WHERE `date` > NOW() ORDER BY `date` LIMIT 1

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

person David Z    schedule 13.04.2009
comment
он не отображает ежемесячно и ежегодно, это означает, что 2015 печатает последнюю строку, а 2016 печатает первую строку даже месяц. - person 151291; 27.11.2015

Несколько вещей, чтобы рассмотреть.

Вы, вероятно, обрекаете себя на вечные муки, если назовете столбец «дата».

Оптимизатор запросов, как известно, не умеет оптимизировать запросы, в которых выражения и/или функции сравниваются со значениями — старайтесь использовать только имена столбцов.

Следовательно, вы должны сравнить значение столбца даты, скажем, с CURDATE(). (Можно сравнить значение столбца с выражением или функцией.)

person dkretz    schedule 13.04.2009
comment
Спасибо за совет. Я изменю название и учту это на будущее. - person Collin Price; 13.04.2009

Может быть:

select top 1 * from schedule where date>=CURDATE() order by date
person Al W    schedule 13.04.2009
comment
Я думаю, что «верхний» - это только SQL Server, а не MySQL. - person nilamo; 13.04.2009

попробуй SELECT max(day) FROM schedule

Это дает самую высокую дату из таблицы.

Чтобы получить следующий день, используйте:

SELECT  
DATE_ADD(max(day),INTERVAL 1 DAY)
FROM schedule 

(Я использовал «день» для вашего поля «дата»)

person Louis    schedule 11.02.2016