我想使用下面的代碼在一天之前刪除數據行。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天前。我在這裏做錯了什麼?
我想使用下面的代碼在一天之前刪除數據行。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天前。我在這裏做錯了什麼?
這是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)
***假設created
是DATE
類型。*
創建看起來像一個unix時間戳給我 – Strawberry
由於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)
。
所有這一切都假定所比較的日期的時區設置爲相同。
而不是'<='嘗試使用'=' – urfusion