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