PHP和mysql获取最近的时间

时间:2011-10-11 14:39:56

标签: php javascript mysql

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

这是一个示例:

date
1317957366
1318043891

我的问题是,我如何查询或创建一个逻辑,以获得一个时间与今天时间最接近的结果?

我想通过mysql查询它而不是php逻辑,但是如果你有建议我应该在php上做,那也没关系。

谢谢,您的帮助将受到极大的赞赏和奖励。 :)

3 个答案:

答案 0 :(得分:5)

比较当前时间的绝对值 - 存储时间,并选择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时间戳,然后减去存储的date }。

答案 1 :(得分:1)

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

http://www.richardlord.net/blog/dates-in-php-and-mysql

答案 2 :(得分:1)

你能不能

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()给出它)并在查询中使用它。