我正在使用time()(php函数)存储日期列。 我的日期列有一个int数据类型,因为我正在使用time()php函数。
这是一个示例:
date
1317957366
1318043891
我的问题是,我如何查询或创建一个逻辑,以获得一个时间与今天时间最接近的结果?
我想通过mysql查询它而不是php逻辑,但是如果你有建议我应该在php上做,那也没关系。
谢谢,您的帮助将受到极大的赞赏和奖励。 :)
答案 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()等。
答案 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()给出它)并在查询中使用它。