簡體   English   中英

連接多個表並匯總第一個表中每一行的結果

[英]Join multiple tables and sum results for each row in first table

我為商店統計信息創建有效的sql查詢時遇到問題。 我有三個表:category,product_categories和orders_products。

表格類別 -包含類別列表和結構外觀(簡短版本):

id
name

product_categories-包含產品和類別之間的連接。 簡短版本的結構:

id
product_id
category_id

orders_products-包含商店中出售的所有產品。 結構如下:

id
product_id
price
quantity

我要做的是顯示帶有類別名稱和當前類別的已售商品價值的表格。

當我有2000多個類別,每個類別中有20多個項目以及許多已售出項目時,就會出現問題。

我試過了:

1)在一個簡單的查詢中獲取所有類別

2)foreach他們(在php中),並使用join用於products_catogories和orders_products

SELECT orders_products.id,orders_products.product_price_gross,orders_products.product_qty,orders_products.option_price,orders_products.rebate
          FROM product_categories
          LEFT JOIN orders_products
          ON product_categories.product_id = orders_products.product_id

3)Foreach結果在PHP和總和值

4)顯示結果

5)效果-在foreach中超過50個類別時掛起db。

我不知道如何優化這么多數據的查詢。 我希望您能對此有所幫助,因為我對join不太滿意。

親切的問候馬克

您可以一步完成所有這些工作,讓MySQL為您執行這些計算:

SELECT categories.name,
       SUM(order_products.price * order_products.quantity)
FROM order_products
LEFT JOIN product_categories ON product_categories.product_id = order_products.product_id
LEFT JOIN categories ON product_categories.category_id = categories.id
GROUP BY categories.name,
         categories.id

這只會返回類別的總和,其中至少包含一次購買。 參見此示例sqlfiddle


UPDATE

我進一步開發了SQL查詢( 新的小提琴 ),以包括每個類別的數量,並通過將JoOIN改過來,將沒有銷售的“空”類別添加到結果中:

SELECT categories.name,
       Ifnull(Sum(order_products.quantity), 0) AS quantity,
       Ifnull(Sum(order_products.price * order_products.quantity), 0) AS `Total Sales`
FROM categories
LEFT JOIN product_categories ON product_categories.category_id = categories.id
LEFT JOIN order_products ON product_categories.product_id = order_products.product_id
GROUP BY categories.name,
         categories.id

我不確定,但是您可以嘗試一下,

SELECT orders_products.id,sum(orders_products.product_price_gross),sum(orders_products.product_qty),sum(orders_products.option_price),sum(orders_products.rebate)
          FROM product_categories
          LEFT JOIN orders_products
          ON product_categories.product_id = orders_products.product_id group by product_categories.category_id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM