我正在使用以下SELECT
脚本成功找到$payer_email
,reminder_date
和sub_expire_date
的值,但是当我应用注释时没有生成数据WHERE
条件为SELECT
。 WHERE
的意图是过滤SELECT
中的值,仅提前30天提供指向订阅到期(sub_expire_date
)的值,但不会导出任何值当值存在时。
任何人都可以告诉我为什么SELECT
未能包含WHERE
?
<?php
error_reporting(E_ALL ^ E_NOTICE);
include_once("../real_conn/real_i_conn.php");
$reminder_date = date("Y-m-d", strtotime("+30 days"));
echo $reminder_date . "<br><br>";
$sql = "SELECT sec_tblpurchased_secureareas.users_id,
sec_tblpurchased_secureareas.sub_expire_date,
DATE_ADD(sec_tblpurchased_secureareas.sub_expire_date, INTERVAL - 30
day) AS reminder_date, sec_tblusers.payer_email
FROM sec_tblpurchased_secureareas
INNER JOIN sec_tblusers ON sec_tblusers.recid =
sec_tblpurchased_secureareas.users_id";
//WHERE DATE_ADD(sec_tblpurchased_secureareas.sub_expire_date, INTERVAL- 30 day) = '". $reminder_date ."' ";
$result = mysqli_query($conni, $sql);
if ($result) {
// Return the number of rows in result set
$rowcount = mysqli_num_rows($result);
printf("Result set has %d rows.\n", $rowcount);
echo "<br><br>";
}
while ($num = mysqli_fetch_array($result)) {
//echo $num;
$payer_email = $num['payer_email'];
echo $num['payer_email'] . " <br>";
$reminder_date = $num['reminder_date'];
$reminder_date = date_create("$reminder_date");
echo date_format($reminder_date, "Y/m/d") . " remind<br>";
$sub_expire_date = $num['sub_expire_date'];
$sub_expire_date = date_create("$sub_expire_date");
echo date_format($sub_expire_date, "Y/m/d") . " expire<br><br>";
}
?>
答案 0 :(得分:0)
您的代码非常难以阅读,并且您分享的代码无效(注释掉//WHERE
行之前的行结束";
但开始后的行- 30
- 这绝对不会编译。
那就是说,我最好的猜测是你错误地使用了DATE_ADD
。请在此处查看相关文档:https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add
请注意,它会返回DATETIME
,而不是DATE
。但是,如果将其包裹在DATE()
电话中,您可能会得到您想要的结果。
答案 1 :(得分:0)
FWIW,我觉得这更容易阅读:
SELECT x.users_id
, x.sub_expire_date
, DATE_ADD(x.sub_expire_date, INTERVAL - 30 DAY) reminder_date
, u.payer_email
FROM sec_tblpurchased_secureareas x
JOIN sec_tblusers u
ON u.recid = x.users_id;
答案 2 :(得分:0)
我认为问题已经间接解决了。看起来我只需要使用
DATE_SUB(sec_tblpurchased_secureareas.sub_expire_date, INTERVAL 30 day) AS reminder_date
而不是具有负日值的DATE_ADD。这给了我触发CRON所需的变量。 谢谢你的帮助。