删除超过一个月/ 30天的记录

时间:2014-12-15 01:49:22

标签: php mysql

我有数据存储在mysql数据库中。我试图删除超过30天的所有记录。所有记录都有一个字段,用于指定记录的created_datecreated_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 |
+------------+-----------+-----+---------------+---------------------------------+

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

您的问题是create_date列是字符串而不是日期。您可以使用str_to_date()将其转换为日期:

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