0

我知道必须有 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 个名字,所以我需要先从数据库中过滤它,然后再将它们附加到电子邮件中。谢谢!

4

1 回答 1

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;
}

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

$oneyearahead = strtotime("+1 year");
$query = "SELECT username FROM users WHERE thedate > FROM_UNIXTIME($oneyearahead)";
于 2013-09-30T22:15:54.733 回答