2009-04-13 45 views
3

我目前正在建設一個棒球網站。在頁面的一側,我想顯示下一場即將到來的比賽的信息。我正在使用MySQL版本。 5.0.45。我的表是建立像這樣:你如何從表中獲得下一個即將到來的日期?

opposingTeam,日期,時間,得分

  • 日期是在MySQL的日期格式(YYYY-MM-DD)
  • 我已經找到了DATEDIFF(DATE1,DATE2 )命令,並試圖用這個實驗沒有運氣

我試圖查詢,如:

SELECT * 
FROM schedule 
WHERE MIN(DATEDIFF(CURDATE(),date)) 
  • 但是,這是因爲我使用的是MIN()功能失常給了我一個arror
  • 我仍然很新的MySQL和我好像不能算出這個

回答

12

如果你想顯示的下一場比賽(包括今天),你可以使用以下內容:

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

如果你想顯示所有即將推出的遊戲使用:

​​
+0

它不是每月和每年都顯示,也就是2015年打印最後一行,2016年打印第一行甚至每月。 – 151291 2015-11-27 06:58:47

0

我覺得這是什麼像這樣:

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

LIMIT 1限制查詢返回一行,但如果你需要不止一個,可以調整相應數量(或省略LIMIT 1完全,爲所有未來的遊戲中獲取數據)

+0

它不顯示每月和每年的明智的,這意味着2015年最後打印一行並且2016年甚至還打印第一排。 – 151291 2015-11-27 06:58:58

0

可能:

select top 1 * from schedule where date>=CURDATE() order by date 
+1

我認爲'top'只是SQL Server - 而不是MySQL。 – nilamo 2009-04-13 05:09:19

0

有幾件事情要考慮。

如果您命名「日期」列,您可能會委託自己承受永恆的折磨。

查詢優化器在優化將表達式和/或函數與值進行比較的查詢時出了名 - 嘗試僅使用列名稱。

因此,您應該比較日期列的值,比如CURDATE()。 (這是確定以比較表達式或功能的列值。)

+0

謝謝你的提示。我會改變名字併爲未來記住這一點。 – 2009-04-13 05:07:59

0

嘗試SELECT max(day) FROM schedule

這給從表中的最高的日期。

爲了讓第二天,使用方法:

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

(我用「天」爲你的領域「日」)

相關問題