Mysql WHERE子句中的查询错误 选择product_key.contact_email、product_key.client_name、product_key.status、product_key.key、paymentdate、product_key.id、MAX(paymentdate)作为最新付款,DATE_ADD(MAX(paymentdate)、INTERVAL 1个月)作为到期日期 从product_key左外部加入付款时的付款。keyid=product_key.id 其中product_key.status='purchased'和expiration_date=date_ADD(NOW(),INTERVAL 10 DAY)按product_key.id分组 按客户名称订购asc

Mysql WHERE子句中的查询错误 选择product_key.contact_email、product_key.client_name、product_key.status、product_key.key、paymentdate、product_key.id、MAX(paymentdate)作为最新付款,DATE_ADD(MAX(paymentdate)、INTERVAL 1个月)作为到期日期 从product_key左外部加入付款时的付款。keyid=product_key.id 其中product_key.status='purchased'和expiration_date=date_ADD(NOW(),INTERVAL 10 DAY)按product_key.id分组 按客户名称订购asc,mysql,sql,Mysql,Sql,这是我的问题。我知道我不能在WHERE子句中使用别名,因为WHERE是在SELECT之前首先读取的。但即使我用了这样的东西: 选择产品密钥、客户名称、日期添加(最长(付款日期)、间隔1个月)作为到期日期 从product_key左外部加入付款时的付款。keyid=product_key.id 其中DATE_ADD(MAX(paymentdate),INTERVAL 1 MONTH)=DATE_ADD(NOW(),INTERVAL 10 DAY)和product_key.status='purch

这是我的问题。我知道我不能在WHERE子句中使用别名,因为WHERE是在SELECT之前首先读取的。但即使我用了这样的东西:

选择产品密钥、客户名称、日期添加(最长(付款日期)、间隔1个月)作为到期日期
从product_key左外部加入付款时的付款。keyid=product_key.id
其中DATE_ADD(MAX(paymentdate),INTERVAL 1 MONTH)=DATE_ADD(NOW(),INTERVAL 10 DAY)和product_key.status='purchased'
按产品分组\u key.id
按客户名称订购asc

还是个错误。请帮忙。谢谢。

因为您使用的是聚合
MAX()
,所以应该将它放在
HAVING
子句中,而不是
WHERE
。假设您的查询是正确的和功能性的,您可以像这样重写它

选择产品密钥。客户名称,
日期添加(最长(付款日期),间隔1个月)作为到期日期
从产品密钥左外连接付款
付款时。keyid=产品\u key.id
和产品_key.status=‘已购买’
按产品分组\u key.id
添加日期(最大(付款日期),间隔1个月)=添加日期(现在(),间隔10天)
按客户名称订购

选择产品密钥。客户名称,
日期添加(最长(付款日期),间隔1个月)作为到期日期
从产品密钥左外连接付款
付款时。keyid=产品\u key.id
和产品_key.status=‘已购买’
按产品分组\u key.id
过期日期=日期添加(现在(),间隔10天)
按客户名称订购

您不能使用
where
子句中的
select
子句中定义的别名。但这没关系,因为您希望使用
having
子句:

SELECT pk.contact_email, pk.client_name, pk.status, pk.key, p.paymentdate, pk.id,
       MAX(paymentdate) AS latest_payment,
       DATE_ADD(MAX(paymentdate), INTERVAL 1 MONTH) AS expiration_date 
FROM product_key pk LEFT OUTER JOIN
     payment p
     ON p.keyid = pk.id 
WHERE pk.status = 'purchased'
GROUP BY pk.id 
HAVING expiration_date = DATE_ADD(NOW(), INTERVAL 10 DAY)
ORDER BY client_name asc;

您可以在
having
子句中使用别名。此外,我还在查询中添加了表别名,以使其更具可读性。

能否按照良好做法告诉我们错误?如果收到错误,是什么@andy-g PHP警告:mysql_fetch_array()希望参数1是资源,Boolean我进行此查询是为了得到一封电子邮件,在我的条件下,如果“过期日期”等于“日期添加(MAX(paymentdate),间隔1个月)=日期添加(NOW(),间隔10天)”,则该电子邮件应与之等效,我应该发送一个通知,告知他的订阅将过期。它没有错误。然而,它没有得到我想要的。我应该收到:一封联系电子邮件(例如。name123@yahoo.com),其中“到期日”=2013年9月5日。我只是不明白。为了帮助你,你必须提供更多的信息。具体来说,实际的表模式(对于两个表)和相关的样本数据应该会产生上述记录。这应该只反映这一个结果,因为我只是为了这一点而做的:从我的表“付款”:paymentdate=2013年8月5日到期日期=2013年9月5日日期添加(现在(),间隔10天)=9月5日,2013年从我的表“产品密钥”:联系人电子邮件=xxx123@yahoo.comCeleTyNoNe= Karl Angelo Pavia,所以我假设使用查询获取这些数据。@ USER 27 10526如果你想帮助,请考虑花几分钟,帮助那些帮助你并提供你的问题的所有必要的信息。看看其他行动是怎么做的我已经解决了。谢谢你的帮助。:)这是我的查询:
选择b.client\u name,DATE\u SUB(DATE\u ADD(a.paymentdate,INTERVAL 1个月),INTERVAL 10天)作为到期日期,从付款中选择a.keyid=b.id和b.status='purchave'组由a.keyid拥有到期日期=日期(NOW())由b.client\u name asc订购:它没有错误。但也没有结果。我手动将我最新的“paymentdate”设置为2013年9月5日的一个数据,以便在我运行查询时反映出来,但我什么也没有得到。