假設我們有字段: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本身自動更新。我只需要記住在創建記錄時插入日期。 –