次のコードを使用して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日前に削除されています。私はここで間違っていますか?
次のコードを使用して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日前に削除されています。私はここで間違っていますか?
を仮定すると***比較
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)
を使用します。
すべてこれは、比較される日付のタイムゾーンが同じに設定されていることを前提としています。
の代わりに '<=' '= 'を試してください – urfusion