簡體   English   中英

PHP從MySQL中選擇,日期字段為將來的7天

[英]PHP Select from MySQL where date field is 7 days in the future

我有一個自動檢查器,用於檢查將在接下來的7天內過期的域,並將其發送並通過電子郵件發送給客戶。

我正在使用此SQL查詢:

SELECT * from domain_names where status = '' or status = 'valid' and expiry_date = DATE(NOW() + INTERVAL 7 DAY)

但它無法正常工作。 我需要它來檢查expirey_date確切地是未來7天的行。 同樣,如果檢查程序停止運行,並且在未運行的時間內錯過了一些行,它也需要執行這些行

您可能expiry_date定義為datetime值,這意味着您的比較不正確。 例如你需要使用

SELECT ... WHERE date(expiry_date) = date(now() + interval 7 day)

相反(請注意,在date()操作中將+7天換行了。

例如

給定一個帶有日期和日期時間字段的表:

+------------+---------------------+
| d          | dt                  |
+------------+---------------------+
| 2013-06-28 | 2013-06-28 08:23:03 |
+------------+---------------------+

注意比較結果如何:

mysql> select d=now(), d=date(now()), dt=now(), dt=date(now()), now() from x;
+---------+---------------+----------+----------------+---------------------+
| d=now() | d=date(now()) | dt=now() | dt=date(now()) | now()               |
+---------+---------------+----------+----------------+---------------------+
|       0 |             1 |        0 |              0 | 2013-06-28 08:26:20 |
+---------+---------------+----------+----------------+---------------------+
1 row in set (0.00 sec)

日期與日期時間=假
日期與日期=真
datetime vs datetime = false(hh:mm:ss不匹配,因此不相等)
datetime vs date = false(日期擴展為yyyy-mm-hh 00:00:00且hh:mm:ss不匹配

您必須在and / or條件中使用括號

SELECT * from domain_names 
where (status = '' or status = 'valid')
and expiry_date = curdate() + INTERVAL 7 DAY

或者用in你的情況

SELECT * from domain_names 
where status in ('', 'valid')
and expiry_date = curdate() + INTERVAL 7 DAY

假設您的到期日期是正確的日期時間字段

expiry_date=DATE_ADD(NOW(), INTERVAL 7 DAY)

比...更可靠

expiry_date=DATE(NOW() + INTERVAL 7 DAY)

實際考慮一下,如果您想在未來的7天之內也必須使用datediff

這樣的事情只返回到期日恰好是從今天起7天的請求。

DATEDIFF(expiry_date,DATE(NOW() + INTERVAL 7 DAY))=7

盡管這並不是萬無一失的方法,但最好還是讓它對照現在和將來7天之間的所有日期進行檢查,然后再在數據庫中設置“已發送電子郵件”標志,以便您可以確認該電子郵件實際上是發送而不是盲目地相信腳本的有效性。

這應根據需要提供結果:

DATE_SUB(CURDATE(),INTERVAL 7 DAY) = expiry_date;

您可以參考下面的鏈接以獲取更多詳細信息:

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

如果您需要告知檢查程序停止運行期間遺漏的行,請使用小標記來指示是否建議了該域。 在那之后,您必須選擇日期小於現在+ 7天的所有行,並將其標記為“不建議”。 發送電子郵件標簽后,它為“已建議”。 並且當他們將域標記續簽為“不建議”時。

$date=date('Y-m-d');
$date=date('Y-m-d', strtotime($date . ' + 7 day'));


//Now, use this query.

SELECT * from domain_names where status = '' or status = 'valid' and expiry_date = '{$date}';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM