如果保存日期超过1年,则来自mysql的PDO查询行

时间:2013-09-30 22:01:25

标签: php mysql date pdo

我知道必须有100个不同的按日期搜索的例子,但它们不起作用,我无法弄清楚代码!我有一个表,可以保存名称和未来日期等。日期由用户保存,并且在varchar字段中为mm-dd-YYYY,尽管如果需要我可以更改。 (建议表示赞赏)。

我需要根据日期查询用户名以发送提醒电子邮件。示例是向他们保存之日起超过1年的人发送电子邮件。到目前为止,我所有人都在选择所有内容,并试图过滤日期,但这是一团糟,我只是删除了所有内容并写下了这个问题。有人可以帮忙吗?

现在我有

$date = date('m-d-Y');

$query = "SELECT username FROM users WHERE thedate > 1year FROM $date"
    // I know this is horribly wrong

// $query_params = array( ':username' => $email );

        try {
            // These two statements run the query against your database table. 
            $stmt   = $db->prepare($query);
            $result = $stmt->execute($query_params);
        }
            catch (PDOException $ex) {

        }

        $rows = $stmt->fetchALL();
        foreach ($rows as $row) {

        $username = $row['username'];

}

可能有5个名称或500个,所以我需要先将其从数据库中过滤掉,然后再将它们附加到电子邮件中。谢谢!

1 个答案:

答案 0 :(得分:0)

最好更改数据库中的类型,但可以在PHP中过滤它们。

您可以通过创建1年的时间然后将每行与时间进行比较来实现。它不能很好地扩展,但会过滤名称。

看起来像是:

$query = "SELECT username,thedate FROM users WHERE thedate > 1year From now()";
// I know this is horribly wrong

// $query_params = array( ':username' => $email );

try {
    // These two statements run the query against your database table. 
    $stmt = $db->prepare($query);
    $result = $stmt->execute($query_params);
} catch (PDOException $ex) {

}

$rows = $stmt->fetchALL();
$time = strtotime("+1 year"); // Create the day 1 year out
$result = array();
foreach ($rows as $row) {
    // If the database date is greater than 1-year out, add it to the result array
    if ($time < strtotime($row['thedate']))
        $result[] = $row;
}

如果更改列类型,还可以创建参数并在where子句中使用mysql函数FROM_UNIXTIME

$oneyearahead = strtotime("+1 year");
$query = "SELECT username FROM users WHERE thedate > FROM_UNIXTIME($oneyearahead)";