我正在尝试这样做,所以我可以选择低于601(稍微10分钟)的值。我接受time()
并按字段time
减去它。我不明白为什么它不起作用。有人可以解释或者SQL没有这种能力。我没有得到任何错误,但它提供的数据没有多大意义。
$pdo->query("SELECT * FROM `online` WHERE '".time()."'-`time` > 601");
它似乎没有用。
数据库
示例数据
id
= 1
uid
= 1
time
= 1376252614(老实说,我不知道为什么这是TEXT
。我之前没有遇到任何问题,所以我认为这不是问题)
答案 0 :(得分:1)
如果您使用的是MySQL,并且time
列是DATETIME
或TIMESTAMP
数据类型,请尝试此查询。
WHERE `time` >= NOW() - INTERVAL 601 SECOND
如果您的time
列是包含Unix样式时间戳的整数(或显示整数的文本字符串),请尝试此操作。
WHERE `time` >= UNIX_TIMESTAMP() - 601
这种构造查询的方式允许MySQL利用time
列上的索引。但是,如果时间戳是一个文本字符串,那么索引会有点奇怪。
请注意,time
是列名的次优选择,因为它是MySQL保留字。你必须勤勉地把它全部封在反叛中,否则你会得到奇怪的错误。
答案 1 :(得分:0)
基本上你想要做的是以下几点:
pdo->query("SELECT * FROM `online` WHERE ADDTIME(time, '0 0:10:0') > NOW()")
这是通过MySQL实现目标的一种方式,还有其他功能,这只是我看到的第一个符合我需要的功能。
此方法将为您的时间增加10分钟,然后将其与当前时间进行比较,如果它大于当前时间,则意味着它在过去10分钟内发生。