假设我们有字段:id |内容| updateTime | creationTime带有条件的SQL查询,其中一个字段不等于另一个字段
插入完成后,updateTime和creationTime都会被当前时间填充。在更新时,只有updateTime字段被更改。当我需要找到上创建的所有数据“2012-06-28”我简单地使用:
SELECT id, content FROM tbl WHERE creationTime LIKE '2012-06-28%'`
但要获得不包括创建的数据已更新,我需要使用像这样的所有数据:
SELECT id, content FROM tbl WHERE creationTime LIKE '2012-06-28%' AND creationTime != updateTime
这显然不起作用。虽然我可以通过比较php内两个'时间'collumns的值来找到所有更新的数据,但我仍然喜欢在查询内部完成它。
UPD:嗯,事实证明,我完全没有意识到,sql不仅允许将字段的值与给定变量,数字进行比较......还可以将一个字段的值与另一个字段的值进行比较。
创建于28日,并在28日编辑,但不是在创建它的同时?在更新之前保持updateTime为null会更好吗? –
为什么你说“*这不能工作,显然*”?我认为它应该,虽然我同意@marabutt认为'updateTime = NULL'可能更符合语义。 (另外,为了匹配日期,你会发现'DATE(creationTime)='2012-06-28''会比你的字符串模式匹配方法更有效率)。 – eggyal
@marabutt - INSERT每行只发生一次,UPDATE可能发生多次。所以我只是使用'updateTime'时间戳NOT NULL default CURRENT_TIMESTAMP - 这种方式'updateTime'由DB本身自动更新。我只需要记住在创建记录时插入日期。 –