Php MySQL选择使用WHERE as date筛选器不起作用

Php MySQL选择使用WHERE as date筛选器不起作用,php,mysql,date,Php,Mysql,Date,我正在使用以下SELECT脚本,它成功地找到$payer_电子邮件、提醒_日期和sub_过期_日期的值,但当我将注释掉的WHERE条件应用于SELECT时,没有生成任何数据。WHERE的目的是过滤SELECT中的值,以便只提供那些指向订阅到期子到期日的值,这些值提前三十天到期,但如果这些值确实存在,则不会派生任何值。 有人能告诉我为什么在包含WHERE之后SELECT失败了吗 您的代码很难阅读,并且您共享的代码在注释掉//行结束处之前的行无效;但是启动后的行-30-这绝对不会编译 也就是说,我最

我正在使用以下SELECT脚本,它成功地找到$payer_电子邮件、提醒_日期和sub_过期_日期的值,但当我将注释掉的WHERE条件应用于SELECT时,没有生成任何数据。WHERE的目的是过滤SELECT中的值,以便只提供那些指向订阅到期子到期日的值,这些值提前三十天到期,但如果这些值确实存在,则不会派生任何值。 有人能告诉我为什么在包含WHERE之后SELECT失败了吗


您的代码很难阅读,并且您共享的代码在注释掉//行结束处之前的行无效;但是启动后的行-30-这绝对不会编译

也就是说,我最好的猜测是您使用的日期添加不正确。请在此处查看相关文档:


请注意,它返回的是日期时间,而不是日期。然而,如果你把它包装在一个电话中,你可能会得到你想要的。

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;

我认为问题已经间接地解决了。看起来我不得不使用

DATE_SUB(sec_tblpurchased_secureareas.sub_expire_date, INTERVAL 30 day) AS reminder_date
添加一个负的日值,而不是日期。这给了我触发CRON所需的变量。
谢谢你的帮助

你收到的错误消息是什么?我没有收到任何错误消息。只是一个空白屏幕。这是包括在内的地方。没有WHERE,回声都很好。注意:我刚刚编辑了SELECT.justice中注释掉的部分。间隔-30天不起作用。如果你想减法,可以使用DATE_SUB,也可以使用简单的算术。@techouse我很确定-30在这里仍然有效。我更正了,它确实有效:O。我从来没有见过这种语法。这可能也是一种不好的做法。我在一些PHP代码中使用了它,其中偏移时间是动态生成的。只向MySQL字符串传递负数要比调用其他MySQL函数来获取传递的变量值更容易。我更新了测试服务器,将x.sub_expire_日期显示为今天,并且它会传递正确的$payer_email、$rementer_date和$sub_expire_date。我需要的是在x.sub\u expire\u日期前三十天找到这三个值的方法。我知道你的更正,但已被注释掉。我留下了-30代码,因为我认为这会澄清我一直在尝试的东西。目前的代码可以正常工作,但在30天前试图查找信息时,它什么也不做。我需要这些数据来触发30天提醒,因为CRON.DATE\u ADD支持负间隔,正如我在回答的评论中提到的,所以这不是问题所在。
DATE_SUB(sec_tblpurchased_secureareas.sub_expire_date, INTERVAL 30 day) AS reminder_date