【问题标题】:Check and retrieve if database column date is in the next X days检查并检索数据库列日期是否在接下来的 X 天内
【发布时间】:2016-12-25 23:23:07
【问题描述】:

我有一个会员网站,其中有一个特定的用户到期日期。我想做的是只让其会员资格将在 X 天后到期的用户向他们发送电子邮件。

db 中有一个名为“mm_user_data”的表,过期日期存储在名为“expiration_date”的列中

我可以使用此代码检索所有用户的到期日期

$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-06-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) { }

由此我希望能够使用$userid 获取 user_email,然后向他发送一封电子邮件作为续订提醒。所以我目前的具体问题是让上面的代码工作并检索在 10 天内到期的用户的用户 ID。

【问题讨论】:

  • 嗨。 $sql3(或$daysPriorToRebill)的输出是什么?日期正确吗?
  • 第一个是正确的,它输出所有日期,我只想得到未来10天的日期,SQL3没有输出任何东西,可能是错误的
  • 这是 $SQL 的输出
  • string(79) "SELECT wp_user_id FROM mm_user_data WHERE expiration_date => '2017-01-04'"
  • => ?应该是>=,不是吗?检查您是否对($wpdb->last_error) 的一些提示有错误,请参阅:wordpress.stackexchange.com/questions/141627/…

标签: php mysql wordpress


【解决方案1】:

我能够使用此代码获取将在未来 10 天内到期的所有用户的 ID

<?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>";


?>

您会注意到我添加了AND expiration_date &gt; '".$todaydate."'",这是因为它正在检索到期日期低于$priorToRebillDate(比 current_day 提前 10 天)的所有会员资格,所以我需要阻止它带来任何已经过期的东西.

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 我对此进行了测试,但由于某种原因它无法正常工作,输出为 0 数组,如果此条件适用于数组,则使用 PHP 输出数字。如果这可以完全从 mysql 查询中完成,那就太棒了
    • 它对我有用。检查sqlfiddle.com/#!9/0e430b/1。您可以尝试使用 mysql workbench 或 phpmyadmin 之类的 sql 管理工具吗?如果同样的错误,请在 sqlfiddle 创建一个模式并将链接发送给我
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多