Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在SQL语句中进行数学运算?_Mysql_Sql_Math_Pdo_Timestamp - Fatal编程技术网

Mysql 在SQL语句中进行数学运算?

Mysql 在SQL语句中进行数学运算?,mysql,sql,math,pdo,timestamp,Mysql,Sql,Math,Pdo,Timestamp,我正试图使它,所以我可以选择值低于601(略10分钟)。我取time()并用字段time减去它。我不明白它为什么不起作用。有人能解释一下吗,或者SQL不具备这种能力。我没有得到任何错误,尽管它给出的数据没有多大意义 $pdo->query("SELECT * FROM `online` WHERE '".time()."'-`time` > 601"); 它似乎不起作用 数据库 样本数据 id=1 uid=1 time=1376252614(老实说,我不知道为什么这是TEXT。但

我正试图使它,所以我可以选择值低于601(略10分钟)。我取
time()
并用字段
time
减去它。我不明白它为什么不起作用。有人能解释一下吗,或者SQL不具备这种能力。我没有得到任何错误,尽管它给出的数据没有多大意义

$pdo->query("SELECT * FROM `online` WHERE '".time()."'-`time` > 601");
它似乎不起作用

数据库

样本数据

id
=1

uid
=1


time
=1376252614(老实说,我不知道为什么这是
TEXT
。但是我以前没有遇到过这个问题,所以我认为这不是问题)

基本上你想做的是:

pdo->query("SELECT * FROM `online` WHERE ADDTIME(time, '0 0:10:0') > NOW()")
这是使用MySQL实现目标的一种方法,还有其他功能,这只是我第一次看到适合我需要的功能


此方法将在您的时间上增加10分钟,然后将其与当前时间进行比较,如果它大于当前时间,则表示它发生在过去10分钟内。

如果您在MySQL中工作,并且您的
时间
列是
日期时间
时间戳
数据类型,请尝试此查询

WHERE `time` >= NOW() - INTERVAL 601 SECOND
如果
time
列是包含Unix样式时间戳的整数(或显示整数的文本字符串),请尝试此操作

WHERE `time` >= UNIX_TIMESTAMP() - 601
这种结构化查询的方法允许MySQL利用
time
列上的索引。但是,如果时间戳是一个文本字符串,则索引的工作方式会有点奇怪


请注意,
time
是列名称的次优选择,因为它是MySQL保留字。你必须一直努力把它用反勾号括起来,否则会出现奇怪的错误。

检查一个基础:
选择'''.time().''-online.time AS t FROM online
-做什么?(首先确定发生了什么。)你在使用MySQL?SQL Server?请披露你的表结构。我在主帖子中添加了我的结构。如果可以,请将
时间的类型更改为时间戳(最好)或至少一个长的(至少允许使用索引/数学)。文本只是在攻击你自己。标记(当前)声明MySQL(正确与否)。请更新该平台的答案。不过,你的方向是正确的(使条件可搜索)。你是正确的,我的错误,我已在Clockwork Muse更新了答案。你的条件不再可搜索,并将忽略任何索引
时间
(这是假设
time
实际上是一个日期/时间类型,而不是文本;具有讽刺意味的是,如果
ADDTIME()
将字符串转换为日期/时间值,则结果应该是正确的,这对于SARGable版本来说可能不是如此……)如果需要的话,我会更改这个名字。谢谢,这是有效的。第二个是我所尝试的,它最终工作了。请考虑使用整数或时间戳数据类型。如果比较整数,索引字符串有时会产生不可预知的结果……它是否将文本列转换为整数?正在转换每一行(并忽略索引);否则我会期望它在
'11'
之后排序
'2'
,诸如此类的东西。这里可能不需要担心(时间戳意味着日志值)但是负值也会对排序产生奇怪的影响。是的,在对文本字段进行算术运算时,会将文本隐式转换为整数。您完全正确地认为“11”之后是“2”。此外,隐式转换会破坏索引。