私はSQLにかなり慣れていないので、これが初心者の質問である場合はお詫びしますが、しばらく頭を悩ませていて、答えがないのでGoogleを検索しているので、これが私の最後の手段です.
過去 30 日間で最も売れた商品を販売する個人サイトで、最も売れたページを作成しようとしています。
データベースには、製品と製品注文の 2 つのテーブルがあります。
商品には、これまでの総販売数、これまでのレビュー数、その他の関連情報が含まれていますが、製品の注文には製品の販売日があります。
だから、商品の良し悪しはタイトルと画像と価格だけだと思っています。
ここで、製品の注文を確認すると、製品 ID と販売日が含まれています。
だから私の質問は、IDをグループ化する方法です。
たとえば、私が持っていた場合:
productid = 42, datesold = 2013-11-08 21:11:10
productid = 11, datesold = 2013-11-08 21:09:10
productid = 42, datesold = 2013-11-08 21:06:10
productid = 2, datesold = 2013-11-07 21:11:10
productid = 11, datesold = 2013-11-06 21:11:10
基本的に言うように、どのように返品しますか
productid = 42 (sold 2 times)
productid = 11 (sold 2 times)
productid = 2 (sold 1 time)
このようなことはできますか?
また、それを示す左結合があると思いますが、グループカウントのロジックを取得できません
これが私の左の結合ロジックです。pdo になることを心に留めておいてください。これは、ステートメントを準備する前にクエリを表示しているだけです ;)
$todaysdate = date('Ymd h:i:s', strtotime("今 - 30 日前"));
SELECT * FROM product_order LEFT JOIN product ON product_order.productId=product.id
WHERE product_order.modifiedDate >= $todaysdate AND product_order.status = 2
ORDER BY product_order.modifiedDate DESC;
与えられた助けを前もって感謝します:)
編集::::::::::::::::::::::::::::::::::::
私はそれを変更しましたが、何らかの理由で大きなエラーが発生しました:
SQLSTATE[42000]: 構文エラーまたはアクセス違反: 1064 SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルで、4 行目の「15:14:13 AND product_order.status = 2 AND product.status = 1 GROUP BY product_o」付近で使用する正しい構文を確認してください。スタック トレース:
SQLクエリは次のとおりです。
$todaysdate = date('Y-m-d G:i:s', strtotime("now - 30 days ago"));
SELECT product.id, product.name, product.picture, product.mainImage, product_option_detail.price, 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 >= {$createddate} AND product_order.status = 2 AND product.status = 1
GROUP BY product_order.productId
ORDER BY NumberOfOrders DESC;