1

Cron を設定しており、現在の日付に一致するレコードに対してさまざまな機能を実行したい

usersのテーブル:

Username      registration_date    expiration_date
behz4d        2012-01-19 21:55:44  2013-01-23 11:15:24
test          2012-05-24 17:42:13  2013-04-12 17:23:19
...

expiration_date今、私はTODAY 単純にテーブルをクエリし、それらexpiration_dateを配列で取得し、その日付を今日の日付と比較することができるユーザーを取得したいと思います。

$current_date = date("Y-m-d");
$query = mysql_query("SELECT username FROM users");
while($row = mysql_fetch_array($query)){
    $users_array[] = $row['username'] . "->" . substr($row['expiration_date'], 0, 10);// since I don't care about the exact time, I need to get the users who their expiration DAY is today 
}
foreach($users_array $username as $expiration_date){
    if($expiration_date == $current_date)
         $my_target_users[] = $username;
}

しかし、これは少し奇妙に思えます。つまり、別の方法があるはずです...

とにかく私が言えることはありますexpiration_date = TODAYか?

誰でもこれで私を助けることができますか?前もって感謝します


アップデート:

有効期限が今日から 3 日後のユーザーを取得するにはどうすればよいでしょうか。メールを送信して、アカウントが 3 日後に期限切れになることを知らせたいのですが...

... WHERE expiration_date >= CURRENT_DATE AND expiration_date < CURRENT_DATE + INTERVAL 3 DAYS

!?

4

1 に答える 1

7
SELECT username FROM users WHERE DATE(expiration_date) = CURRENT_DATE

ただし、これには(非効率的な)全表スキャンが必要です。にインデックスがある場合は、expiration_date代わりに次を使用する必要があります。

SELECT username
FROM   users
WHERE  expiration_date >= CURRENT_DATE
   AND expiration_date <  CURRENT_DATE + INTERVAL 1 DAY
于 2013-01-19T19:06:36.153 に答える