2017-10-15 3 views
0

次のコードを使用して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日前に削除されています。私はここで間違っていますか?

enter image description here

+0

の代わりに '<=' '= 'を試してください – urfusion

答えて

1

それはUNIX_TIMESTAMP()です。

いずれcreated列があるのでcreatedDATEタイプである。*

+0

私にはunixのタイムスタンプのように見えます – Strawberry

2

を仮定すると***比較

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) 

の両側にそれを使用明らかに秒単位で、日付を比較するにはではなくFROM_UNIXTIME(created)を使用してください0を返します。例えば、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と比較してください。

1日前に消去された行をすべて削除する場合は、WHEREの条件<=DATE_SUB(NOW(), INTERVAL 1 DAY)の状態はokです。しかし、1日前に削除された行だけを削除したい場合は、1日以上前に作成された行を保持しておき、代わりに=DATE_SUB(NOW(), INTERVAL 1 DAY)を使用します。

すべてこれは、比較される日付のタイムゾーンが同じに設定されていることを前提としています。

関連する問題