2017-10-15 49 views
0

我想使用下面的代碼在一天之前刪除數據行。1天后自動刪除行不會使用php

mysqli_query($this->db,"DELETE FROM posts WHERE UNIX_TIMESTAMP(created)<=DATE_SUB(NOW(), INTERVAL 1 DAY)") or die(mysqli_error($this->db)); 

但它是刪除所有行,每次不是1天前。我在這裏做錯了什麼?

enter image description here

+0

而不是'<='嘗試使用'=' – urfusion

回答

1

這是UNIX_TIMESTAMP()

要麼使用它在所述比較

DELETE FROM table 
WHERE UNIX_TIMESTAMP(created)<=UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY)) 

或任何一方的兩側

DELETE FROM table WHERE created<=DATE_SUB(NOW(), INTERVAL 1 DAY) 

***假設createdDATE類型。*

+0

創建看起來像一個unix時間戳給我 – Strawberry

2

由於created列是顯然已經在幾秒鐘內,比較日期應該使用FROM_UNIXTIME(created)而不是UNIX_TIMESTAMP(created)在MySQL查詢中。例如參見:https://www.w3resource.com/mysql/date-and-time-functions/mysql-from_unixtime-function.php並與https://www.w3resource.com/mysql/date-and-time-functions/mysql-unix_timestamp-function.php比較。

如果要刪除前一天清除的所有行,則WHERE條件<=DATE_SUB(NOW(), INTERVAL 1 DAY)條件沒問題。但是,如果您只想刪除1天前清除的行,而保留1天前創建的行,則可以使用=DATE_SUB(NOW(), INTERVAL 1 DAY)

所有這一切都假定所比較的日期的時區設置爲相同。