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 

または、Zane がこの回答で提案しているように、MySQL に日付/時刻の計算をさせることもできます。

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

Date_Sub の MySQSL ドキュメントも参照してください。

于 2013-11-10T19:08:22.640 に答える