PHP和mysql获得今天最接近的时间

PHP和mysql获得今天最接近的时间,php,javascript,mysql,Php,Javascript,Mysql,我使用time()(php函数)存储一个日期列。 我的日期列具有int数据类型,因为我使用的是time()php函数 这是一个示例: date 1317957366 1318043891 我的问题是,我将如何查询或创建一个逻辑,以得到谁的时间最接近今天的时间的结果 我想通过mysql查询它,而不是在php逻辑上,但是如果您建议我应该在php上查询,那么也可以 感谢您的帮助,我们将不胜感激和回报。:) 比较当前时间的绝对值-存储的时间,然后选择以下各项中的MIN(): 也许是这样的 SELECT

我使用time()(php函数)存储一个日期列。 我的日期列具有int数据类型,因为我使用的是time()php函数

这是一个示例:

date
1317957366
1318043891
我的问题是,我将如何查询或创建一个逻辑,以得到谁的时间最接近今天的时间的结果

我想通过mysql查询它,而不是在php逻辑上,但是如果您建议我应该在php上查询,那么也可以


感谢您的帮助,我们将不胜感激和回报。:)

比较当前时间的绝对值-存储的时间,然后选择以下各项中的
MIN()

也许是这样的

SELECT *
FROM tbl
GROUP BY `date`
HAVING MIN(ABS(UNIX_TIMESTAMP(NOW()) - `date`));
如果无法正常工作,请尝试使用子查询:

SELECT *
FROM tbl
WHERE  ABS(UNIX_TIMESTAMP(NOW()) - `date`) IN
  SELECT (MIN(ABS(UNIX_TIMESTAMP(NOW()) - `date`)) FROM tbl);

由于您已将日期存储为
INT
而不是MySQL
DATETIME
,因此需要将当前时间戳
NOW()
转换为Unix时间戳,然后减去存储的
日期

,您应该将日期/时间转换为Unix时间戳,并将其存储在MySQL中的DATETIME类型中。为什么?因此,您可以使用mysql中的各种函数,如year()、month()等

你就不能

SELECT * FROM `tbl` ORDER BY ABS(UNIX_TIMESTAMP(NOW()) - `date`) LIMIT 0,1
?

您还可以尝试使用mysql变量查找距离现在最小的行:

SET @min = 1000000000000, @minid = 0;

SELECT 
  @minid := IF(@min > ABS(UNIX_TIMESTAMP(NOW()) - `date`), id, @minid), 
  @min := IF(@min > ABS(UNIX_TIMESTAMP(NOW()) - `date`), ABS(UNIX_TIMESTAMP(NOW()) - `date`), @min) 
FROM 
  `tbl` ;

SELECT * FROM `tbl` WHERE id = @minid;

您还可以在PHP中计算UNIX_TIMESTAMP(NOW())的值(time()给出它),并在查询中使用它。

俗语说,如果这冒犯了您,请道歉。吃自己的狗粮只意味着用自己的设计来对抗自己。如果设计师不能完全处理好自己的设计,这通常是一个迹象,表明做了错事。但您只能说,如果您指定了运行的问题。例如,使用日期列有助于进行基于日期的查询。你仍然可以返回它的时间戳。是的,没问题。无论如何,谢谢你的评论。:)我认为“吃你自己的狗粮”意味着“使用你开发的解决方案”来改进它,并证明它比竞争对手更好。你不能只做负计算吗?它是整数,以秒为单位。实际上不需要计算时间。@hakre如果它们都是过去的,则不需要使用
ABS()
。您的答案没有解决问题。我认为对这个问题发表评论会更好地听取你的建议。OP也征求了一些建议,以帮助解决他的问题