2011-02-27 83 views
1

我将首先解释我的目标:我希望用户查询数据库,并且仅当这些行自上次查询后已更新时才返回行。没有意义返回他们已有的数据。所以我创建了一个名为'lastupdated'的列,这是一个时间戳类型,每次更新该行中的任何内容时都会自动进行更新。这工作正常。现在,我想正确地形成查询。用户将保存他们先前查询的时间戳,并且通过php将用它来比较他们以前的查询时间和每行更新的时间。如果该行在最后一次查询后更新,则应该返回该行。有关MySQL时间戳比较的问题

我做了这样的事情,

SELECT * FROM users WHERE '2011-02-26 01:50:30' <= lastupdated 

但它显然要太简单了。我查看了MySQL手册,发现此页面为MySQL Time/Date Page。我确信答案在这里,但我已经读过它,没有任何意义。我有一个MySQL时间戳类型使用的相同格式的时间戳,但我不知道如何比较它们。非常感谢您的帮助。

+0

您是否尝试过查询本身。它会工作。 – amitchd 2011-02-27 07:28:24

+0

我检查过,如果这会工作,我得到一个语法错误。我可能错误地输入了一些内容。我将再次检查并发布结果,谢谢大家。 – JMRboosties 2011-02-27 10:16:58

+0

请注意,您的*小于或等于*可能很容易导致在前一个结果集中具有最大'lastupdated'值的行的重复传输。所以,*如果*你可以排除在单秒内插入,选择,插入的情况,那么你可能想使用*小于*。 – Timo 2013-12-03 16:11:16

回答

5

该查询正是你如何做的。只要字符串化的日期时间是MySQL的首选格式(yyyy-mm-dd hh:mm:ss),那么它将在内部转换为日期时间值,并且比较将继续。

如果您想做比简单的“大于/小于/等于”类型比较更复杂的事情,您只需要找到日期/时间函数。 “任何有12月时间戳的记录”。

3

正如马克所说,你的代码应该工作。但是你可能想用编程的方式用变量来代替文字。

如果你没有指定为字符串的日期时间,而是作为一个时间戳(例如,从使用PHP time()功能),那么你可以使用下面的查询:

$query = "SELECT * FROM users WHERE FROM_UNIXTIME(" . $timestamp . ") <= lastupdated"; 

的关键是FROM_UNIXTIME() MySQL的功能。