2016-12-25 49 views
0

我有一个会员网站,其中有一个特定的到期日期的用户。我想要做的就是只让用户在X天内过期,并向他们发送电子邮件。检查并检索数据库列日期是否在未来X天

有以dB为单位称为“mm_user_data”表,这是那里的有效期限存储在列名为“到期日期”

我可以使用此代码

$sql = "SELECT expiration_date FROM mm_user_data"; 
$expire= $wpdb->get_results($sql); 
echo var_dump($expire); 
检索所有用户的有效期限

输出是这

[0]=> object(stdClass)#2455 (1) { ["expiration_date"]=> string(19) "2017-06-30 16:00:00" } 

我需要做的是检查和检索列wp_user_id仅在“2017年6月30日16:00:00”在接下来的10天为例Ë

我试过,但它似乎并不奏效

$daysPriorToRebill = 10; 
$priorToRebillDate = date('Y-m-d', strtotime("-{$daysPriorToRebill} days")); 

$sql3 = "SELECT wp_user_id 
FROM mm_user_data 
WHERE expiration_date = '".$daysPriorToRebill."'"; 
$userid = $wpdb->get_results($sql3); 
echo var_dump($userid); 

输出array(0) { }

从这我希望能够得到user_email使用$userid,然后发送给他一封电子邮件作为续约提醒。所以我现在的具体问题是让上面的代码工作,并检索用户的用户id在10天内过期。

+0

嗨。 '$ sql3'(或'$ daysPriorToRebill')的输出是什么?日期是否正确? –

+0

第一个是正确的,它输出所有日期,我只想得到在未来10天内的日期,SQL3不输出任何东西,它可能是错误的 –

+0

这是$ SQL的输出 –

回答

0

我是能够做到使用此代码

<?php 
global $wpdb; 


// This SQL retrieves all subscriptions That wil expire in 10 days 

$daysPriorToRebill = 10; 
$priorToRebillDate = date('Y-m-d', strtotime("+{$daysPriorToRebill} days")); 
$todaydate = date('Y-m-d'); 

    $sql3 = "SELECT wp_user_id 
    FROM mm_user_data 
    WHERE expiration_date < '".$priorToRebillDate."' AND expiration_date > '".$todaydate."'"; 

$userid = $wpdb->get_results($sql3); 


echo "<p>User ids are {var_dump($userid)}</p>"; 


?> 
获得了将在未来10天内到期的所有用户的ID,

你会发现我加AND expiration_date > '".$todaydate."'"这是因为它是获取一个具有所有成员有效日期低于$priorToRebillDate,比current_day早10天,所以我需要阻止它带来任何已经过期的事情。

0

您可以使用mysql查询来检索所有用户,例如只剩10天,直到他们的订阅结束使用DATE()CURDATE()DATEDIFF()

SELECT wp_user_id FROM mm_user_data WHERE DATEDIFF(CURDATE(),DATE(expiration_date)) = 10 

该查询将返回所有用户,其订阅在10天内结束。无需使用php进行痛苦的日期计算。

+0

下面我测试了这个,但它不工作,出于某种原因,输出是0数组,使用PHP它会输出数字,如果这个条件适用的数组。这将是真棒,如果这可以完全从MySQL查询 –

+0

它正在为我工​​作。检查http://sqlfiddle.com/#!9/0e430b/1。你可以尝试使用像mysql工作台或phpmyadmin这样的SQL管理工具。如果同样的错误,请在sqlfiddle中创建一个模式并将链接发送给我 –

相关问题