0

嗨,伙计们,我为此绞尽脑汁已经有一段时间了。

如果我删除日期 >= 窗帘日期,则此查询有效。但是在使用时会报错。

我正在使用 Mysql 数据库。

这是我正在使用的代码,请记住这是我在 pdo 中使用准备好的语句之前的版本。

$todaysdate = date('Y-m-d G:i:s', strtotime("now - 30 days ago"));

$sql = " 

SELECT *, COUNT(product_order.productId) AS NumberOfOrders FROM product_order 
RIGHT JOIN product ON product_order.productId=product.id 
INNER JOIN product_option_detail ON product_order.productId=product_option_detail.productId 
WHERE product_order.modifiedDate >= {$todaysdate} AND product_order.status = 2 AND product.status = 1 

";

我收到的错误消息是:

SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 4 行的“18:55:40 AND product_order.status = 2 AND product.status = 1 GROUP BY product_o”附近使用正确的语法

欢迎任何帮助,我感谢你:)

4

1 回答 1

1

就像现在一样,MySQL 将尝试将日期/时间解释为符号而不是文字值。

 $todaysdate = date('Y-m-d G:i:s', strtotime("now - 30 days ago"));

变成这样的东西:

2013-10-11 13:59:44 

您将该值填充到您的 SQL 语句中,它变成:

SELECT *, COUNT(product_order.productId) AS NumberOfOrders FROM product_order 
RIGHT JOIN product ON product_order.productId=product.id 
INNER JOIN product_option_detail ON product_order.productId=product_option_detail.productId 
WHERE product_order.modifiedDate >= 2013-10-11 13:59:44 AND product_order.status = 2 AND product.status = 1 

您需要将日期/时间放在引号之间,以便 SQL 变为:

SELECT *, COUNT(product_order.productId) AS NumberOfOrders FROM product_order 
RIGHT JOIN product ON product_order.productId=product.id 
INNER JOIN product_option_detail ON product_order.productId=product_option_detail.productId 
WHERE product_order.modifiedDate >= '2013-10-11 13:59:44' AND product_order.status = 2 AND product.status = 1 

或者,您可以让 MySQL 进行日期/时间数学运算,就像 Zane 在此答案中建议的那样:

product_order.modifiedDate >=  CURDATE() - INTERVAL 4 WEEK 

另请查看Date_Sub 的 MySQSL 文档

于 2013-11-10T19:08:22.640 回答