簡體   English   中英

刪除一個月/ 30天以上的記錄

[英]Deleting records older than a month/30 days

我將數據存儲在mysql數據庫中。 我正在嘗試刪除所有超過30天的記錄。 所有記錄都有一個字段,用於指定記錄的created_date created_date的格式為Mon, 08 Dec 2014 00:33:13 -0500 運行刪除查詢時,將刪除所有記錄。 甚至不超過30天的記錄。 我不確定這是否是由於created_date字段中日期的格式所致。 如何刪除30天以上的記錄?

try {
     $days = strtotime('1 month');
     $delete = $pdo->prepare("DELETE FROM archive WHERE created_date > :days");
            return $delete->execute(array('days' => $days));
        }catch (Exception $e) {
                      echo "Failed: " . $e->getMessage();
        }

表架構

+------------+-----------+-----+---------------+---------------------------------+
| First Name | Last Name | Age | Date of Birth |           created_date          |
+------------+-----------+-----+---------------+---------------------------------+
| Lionel     | Messi     |  27 | 6/24/1987     | Mon, 08 Dec 2014 00:33:13 -0500 |
| Michael    | Jordan    |  51 | 2/17/1963     | Tue, 15 Nov 2014 00:33:13 -0500 |
| Lebron     | James     |  30 | 12/30/1984    | Fri, 02 Oct 2014 00:33:13 -0500 |
+------------+-----------+-----+---------------+---------------------------------+
DELETE FROM archive
WHERE STR_TO_DATE(SUBSTR(created_date, 0, 25), '%a, %d %b %Y %H:%i:%S') <
      DATE_SUB(NOW(), INTERVAL 30 DAY);

然后,您可以刪除用於計算日期范圍的PHP代碼,然后讓MySQL為您處理。

如果您可以控制數據庫結構,則將日期存儲在DATETIME字段中STR_TO_DATE在每個數據庫行上調用STR_TO_DATE效率更高。

您的問題是create_date列是字符串而不是日期。 您可以使用str_to_date()將其轉換為日期:

delete from archive
    where str_to_date(substr(created_date, 6), '%d %b %Y') > :days;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM