重寫後的標題為:取得前10位顧客購買的產品
P粉386318086
P粉386318086 2023-08-29 21:31:29
0
1
453
<p>我想在laravel/php中寫一個SQL查詢,以獲得客戶購買的前10個不同的產品。 </p> <p>我的表格架構如下:</p> <ul> <li><code>Orders</code>表(客戶ID、產品ID等...)</li> <li><code>Products</code>表(產品ID、產品名稱等...)</li> </ul> <p>這是我的查詢嘗試:</p> <pre class="brush:php;toolbar:false;">SELECT products.* FROM products WHERE products.id = [SELECT DISTINCT (products.id) FROM orders WHERE customer.id=id->list(10)]</pre></p>
P粉386318086
P粉386318086

全部回覆(1)
P粉951914381

我可以看出你嘗試的查詢方向,但不幸的是這不會給你前10個結果。相反,你可能根本不會得到任何結果:

SELECT products.* 
 FROM products 
 WHERE products.id=[SELECT DISTINCT (products.id) 
                 ^^^   FROM orders 
                       WHERE customer.id=id->list(10)]

=表示你正在尋找一個精確匹配,你的子查詢應該返回10個的數據,如果你使用這個操作,你將收到這個錯誤。

但如果你將其改為IN,你可能會收到這個錯誤

根據你目前的嘗試,你的選擇是進行一個JOIN。然而,我想知道你是如何得到你的前10個的?我可以看到你正在尋找產品的前10個,但基於什麼?銷售金額?訂購數量?

在這個意義上,這是一個按訂購數量排序的前10個產品的範例。

SELECT P.* 
FROM Products P 
 JOIN ( SELECT product_id
         FROM Orders
        GROUP BY product_id
        ORDER BY SUM(Qty) DESC
    LIMIT 10) O 
ON P.id=O.product_id;

子查詢是不必要的,但我在模仿你嘗試的子查詢,雖然過程並不完全相同。這是沒有子查詢的版本:

SELECT P.*
FROM Orders O 
 JOIN Products P ON O.product_id=P.id
GROUP BY product_id
ORDER BY SUM(Qty) DESC
LIMIT 10;

或者你可能正在尋找按銷售金額排序的前10個?

SELECT P.*
FROM Orders O 
 JOIN Products P ON O.product_id=P.id
GROUP BY product_id
ORDER BY SUM(UnitPrice*Qty) DESC
LIMIT 10;

示範fiddle

#
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!