我正在使用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时间戳,然后减去存储的date
。
您应该将日期/时间转换为UNIX时间戳,并将其存储在mysql中的datetime类型中。为什么?因此,您可以使用mysql的各种函数,如year(), month()等。
http://www.richardlord.net/blog/dates-in-php-and-mysql你就不能
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()给出它)并在你的查询中使用它