Сумма с внутренним объединением в PHP - PullRequest
0 голосов
/ 10 мая 2018

Я работаю с PHP и MySQL, и мне нужно СУММИТЬ общее количество продуктов, объединяющих 3 таблицы:

order_products: (в таблице есть несколько продуктов с одинаковым названием, но разными суммами)

order_id        (int)
product_name    (varchar)
product_amount  (int)

заказы:

order_id       (int)
order_date     (varchar)
order_status   (varchar)

поставщик:

product_name    (varchar)
product_amount  (int)

Итак, я хочу показать, сколько продуктов я продал и статус отгружен и сколько я заказал у поставщика в один ряд. Любой из двух приведенных ниже примеров поможет мне достичь своей цели.

Как:

Product Name     (sum order_products)      (sum supplier)  Order status

first product           300                  2500          Shipped_Only
second product          50                   400           Shipped_Only
third product           10                   600           Shipped_Only


Product Name     (sum order_products)      (sum supplier)  Order status

first product           2200                 2500          Not_Shipped
second product          400                  400           Not_Shipped
third product           590                  600           Not_Shipped

Могу ли я получить какие-либо примеры или другую помощь для этого?

Edit: Пример данных выглядит следующим образом

order_products:

order_id       product_name     product_amount

255               product 1         200
256               product 1         100
257               product 2         50
258               product 3         10

заказы: order_id order_date order_status

255               09.05.2018         Shipped
256               09.05.2018         Shipped
257               10.05.2018         Not_Shipped
258               10.05.2018         Not_Shipped

поставщик: product_name product_amount

product 1         2500        
product 2         400   
product 3         600    

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Из того, что я понимаю, я думаю, что это то, что вы хотите, пожалуйста, дайте больше ясности, если это не то, что вы ожидаете.

Вам нужно будет использовать предложение GROUP BY, а затем вам нужно будет использовать функцию count () для подсчета количества строк для результатов, полученных из предложения Group By.Я пишу пример использования предложения group by, вам нужно будет изменить запрос в соответствии с вашими потребностями.

SELECT
 order_products.product_name,
 count(*) as Total_Orders,
 MAX(supplier.product_amount) as Supplier_Amt,
 orders.order_status
FROM supplier
 INNER JOIN order_products ON supplier.product_name = order_products.product_name
 INNER JOIN orders ON orders.order_id = order_products.order_id
WHERE orders.order_status = 'Not_Shipped'
GROUP BY order_products.product_name, orders.order_status;

Вам понадобятся запросы, вы можете написать другой, просто заменитьWHERE orders.order_status = 'Not_Shipped' с WHERE orders.order_status = 'Shipped' Также, если вы хотите, чтобы все в одном запросе, просто удалите предложение where.

0 голосов
/ 10 мая 2018

Вы должны использовать объединение в агрегированном подвыборе.

SELECT t1.product_name, t1.sum_order_products, t2.supplier_sum, t1.order_status 
FROM (
    SELECT op.product_name, SUM(op.product_amount) sum_order_products, o.order_status
    FROM order_products op
    INNER JOIN orders o ON op.order_id = o.order_id 
    WHERE o.order_status = 'Shipped'
    GROUP BY op.product_name, o.order_status
) t1 
LEFT JOIN (
    SELECT s.product_name, SUM(s.product_amount) supplier_sum
    FROM supplier s 
    GROUP BY s.product_name
) t2 ON t1.product_name = t2.product_name 
ORDER BY t1.order_status, t1.product_name
...