0

日付による検索には 100 の異なる例があるはずですが、それらは機能せず、コードを理解できません! 名前と将来の日付を保存するテーブルがあります。日付はユーザーによって保存され、必要に応じて変更できますが、mm-dd-YYYY として varchar フィールドにあります。(提案をいただければ幸いです)。

リマインダー メールを送信するには、日付に基づいてユーザー名をクエリする必要があります。たとえば、保存してから 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 に答える