我将首先解释我的目标:我希望用户查询数据库,并且仅当这些行自上次查询后已更新时才返回行。没有意义返回他们已经拥有的数据。所以我创建了一个名为'lastupdated'的列,这是一种时间戳类型,每次更新行中的任何内容时都会自动更新。这很好用。现在,我想正确地形成查询。用户将保存其先前查询的时间戳,并通过php将其用于将其先前查询的时间与每行更新的时间进行比较。如果行在上次查询后更新,则应返回该行。
我做了这样的事,
SELECT * FROM users WHERE '2011-02-26 01:50:30' <= lastupdated
但它显然太简单了。我检查了MySQL手册,找到了这个页面MySQL Time/Date Page。我确定答案就在这里,但我已经读过它,没有什么是真正有意义的。我有一个MySQL时间戳类型使用的相同格式的时间戳,但我不知道如何比较它们。非常感谢你的帮助。
答案 0 :(得分:5)
该查询正是您如何做到的。只要字符串化的日期时间是MySQL的首选格式(yyyy-mm-dd hh:mm:ss),那么它将在内部转换为日期时间值,并且比较将继续进行。
如果你想做一些比简单的“大于/小于/等于”类型比较更复杂的事情,你只需要你找到的日期/时间函数,例如: “任何有12月时间戳的记录”。
答案 1 :(得分:3)
正如Marc所说,你的代码应该有效。但您可能希望以编程方式使用变量而不是文字。
如果您没有将日期时间指定为字符串,而是作为时间戳(例如使用php time()
函数),则可以使用以下查询:
$query = "SELECT * FROM users WHERE FROM_UNIXTIME(" . $timestamp . ") <= lastupdated";
关键是FROM_UNIXTIME()
MySQL函数。