2013-06-28 28 views
7

Tôi có trình kiểm tra tự động kiểm tra các miền sắp hết hạn trong vòng 7 ngày tới và gửi và gửi email cho khách hàng.cách chọn hàng từ cơ sở dữ liệu trong php nơi trường ngày là 7 ngày trong tương lai

Im sử dụng truy vấn SQL này:

$sql="SELECT * from domain_names where (status = '' or status = 'valid') and date(expiry_date) = date(now() + interval 7 day) "; 

nó hoạt động tốt nhưng nếu nó dừng chạy và một ngày trôi qua nó sẽ không làm các lĩnh vực nó đã bị bỏ lỡ. whats cách tốt nhất để làm cho nó làm các lĩnh vực của nó bị mất quá? Ví dụ:

ví dụ: nếu miền hết hạn vào ngày 7 và chạy vào ngày 1, tên miền đó và gửi email cho khách hàng sau đó đặt cờ trên hàng để nói email đã được gửi nhưng nếu trình kiểm tra không chạy ngày 1 và nó bắt đầu chạy trở lại vào ngày 2, nó sẽ không thấy tên miền đó (hàng)

+1

Ý tưởng hay, cờ điều đó, vậy chính xác thì câu hỏi là gì? – fvu

+0

nó hoạt động tốt nhưng nếu nó ngừng chạy và một ngày trôi qua nó sẽ không làm các tên miền mà nó đã bỏ qua. whats cách tốt nhất để làm cho nó làm các lĩnh vực của nó bị mất quá? –

+0

Sử dụng sự kiện MySQL để chạy hàng ngày theo lịch biểu. –

Trả lời

0

Bạn chỉ kiểm tra ngày chính xác 7 ngày trước. Bạn muốn kiểm tra trước tối đa 7 ngày. Thay đổi mã của bạn thành:

Vì bạn có cờ bất kỳ lá cờ nào đã được gửi qua email trong khoảng thời gian này sẽ không được nhận lại e-mail nữa.

+0

thats đang làm tất cả các hàng trong cơ sở dữ liệu? –

0

Bạn muốn kiểm tra nơi DATE là LESS DO OR EQUAL TO (hôm nay + 7 ngày).

Bạn cũng nên có một số loại "cờ" trong bảng, chẳng hạn như reminderSent - vì vậy bạn không gửi nhiều lời nhắc mỗi lần truy vấn/tập lệnh được chạy.

$sql = "SELECT * from domain_names WHERE 
    (status = '' or status = 'valid') AND 
    date(expiry_date) <= date(now() + interval 7 day) AND 
    AND !reminderSent"; 
0

Vì bạn có cờ để cho biết email đã được gửi chưa. Chỉ cần kiểm tra trạng thái cờ cho tất cả các tên miền sẽ hết hạn trong vòng 7 ngày tới.

Và truy vấn của bạn chỉ trả về các tên miền hết hạn một tuần kể từ hiện tại. Sửa đổi nó để trả lại các miền hết hạn trong vòng 7 ngày tới.

0

Về cơ bản, bạn cần gửi thư nếu trong vòng 7 ngày HOẶC có cờ không đầy đủ.

tôi sẽ tuy nhiên thay đổi cột từ một chuỗi thành một số nguyên vì nó thực sự chỉ có hai giá trị sent hoặc not sent tức là 1 hoặc 0.

SELECT 
    * 
FROM 
    domain_names 
WHERE 
    status = 0 
OR 
    expiry_date BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY) 

Trong trường hợp này, cung cấp cho bạn cập nhật các trường trạng thái tới 1 bạn sẽ luôn có thể gửi lần tiếp theo khi tập lệnh không thành công.

0

Có lẽ bạn cần một số khoảng thời gian ngày như:

$sql="SELECT * from domain_names where (status = '' or status = 'valid') and date(expiry_date) between date(now()) and date(now() + interval 7 day)"; 
0

Thêm một ngày xử lý lên mức kỷ lục. Đây là hai lần, nó cung cấp cho bạn cờ được xử lý, nhưng nó cũng cung cấp cho bạn một tham chiếu lịch sử khi thông báo được gửi đi.

Trong truy vấn của bạn, thêm điều kiện cho biết processed_date là null và hết hạn là nhỏ hơn hoặc bằng ngày hôm nay cộng với 7 ngày.

(pseudo) where ... and processed_date is null and expiry_date <= today + 7 

Khi bạn đang tìm kiếm các hồ sơ sau khi bỏ lỡ

0
This should give the result as you need: 

DATE_SUB(CURDATE(),INTERVAL 7 DAY) = expiry_date; 
You can refer to the link below for more details: 

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

Thiết lập một sự kiện CRON ở phía máy chủ, nếu máy chủ web của bạn cung cấp nó. Sau đó, bạn có thể có nó chạy thường xuyên như bạn muốn, mà không cần phải lo lắng về cúp điện hoặc cúp internet.

0

Hãy thử với truy vấn này. Nó sẽ sử dụng đầy đủ cho bạn ..

$ sql = "SELECT * từ domain_names nơi (status = '' hoặc status = 'hợp lệ') và DATE_ADD (EXPIRY_DATE, INTERVAL 7 NGÀY)";

0

Hoặc bạn có thể thiết lập trong php bằng cách sử dụng biến thay cho ngày hiện tại cộng với 7 ngày như;

$nextWeek=date("Ymd")+7; 
$sql="SELECT * from domain_names where (status = '' or status = 'valid') 
and date(expiry_date) <= $nextWeek) "; 

bất cứ định dạng ngày bạn sử dụng, bạn sẽ cần phải trao đổi "Ymd" nếu khác nhau, đó là 20140621 như tôi viết những dòng này sẽ dịch để 20140628.

chữ thường m và chữ thường d cho phép hai ngày và tháng gồm hai chữ số "06" hoặc "01". chữ hoa tôi tin rằng sẽ thay đổi nó thành một con số .... 2014621 và bạn có thể thay đổi thứ tự và đặt "/" hoặc "-" như trong:

ngày ("MDY") +7 = 6-28- 2014

ngày ("d/M/Y") + 7 = 28/6/2014

1

Chỉ cần một chút thay đổi trong mã của bạn (Đưa '<'):

0

Bạn có thể sử dụng mã này.

$sql = SELECT * from domain_names where (status = '' or status = 'valid') and date(expiry_date) = DATE_ADD(date(now()), INTERVAL 7 DAY); 

Nó có thể giúp bạn ...

0

có bạn coi thêm một khúc gỗ khi yo kiểm tra cuối cùng hồ sơ hết hạn của bạn và sau đó sử dụng mà ngày càng biến của bạn, do đó bạn có thể kiểm tra từ đó ngày cuối cùng mỗi thời gian mã của bạn chạy?

Các vấn đề liên quan