2009-04-13 46 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 

(我用“天”为你的领域“日”)

相关问题