0

私は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;
4

2 に答える 2

1

GROUP BY製品の ID と名前で行をグループ化し、集計を使用してcount各製品の注文数をカウントするために使用します。

SELECT p.id, p.name, count(po.order_id) 
FROM product_order as po
LEFT JOIN product  as p ON po.productId = p.id
WHERE po.modifiedDate >= $todaysdate AND po.status = 2 
GROUP BY p.id,p.name
ORDER BY po.modifiedDate DESC;

グループ別の詳細http://www.w3schools.com/sql/sql_groupby.asp

于 2013-11-10T09:13:13.970 に答える
-1
SELECT p.id, p.name, count(po.order_id) AS ProductSold 
FROM product_order as po
LEFT JOIN product  as p ON po.productId = p.id
WHERE po.modifiedDate >= $todaysdate 
GROUP BY p.id,p.name
ORDER BY ProductSold DESC;
于 2013-11-10T11:37:06.900 に答える