首页 > 解决方案 > 连接表以创建两个单独订单的总和

问题描述

我试图将每个项目的成本转到最终表,它只显示最终的 ORDER_ID 和 ORDER_TOTAL。我在让我的两个表加入时遇到问题,并且在整体上与 JOIN 作斗争。这是我要加入的两个表。

订单成本

CREATE TABLE `order cost` (
  `ORDER_ID` int(10) NOT NULL,
  `MENU_COST` double(5,2) NOT NULL,
  `ORDER_COST` double(5,2) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


INSERT INTO `order cost` (`ORDER_ID`, `MENU_COST`, `ORDER_COST`) VALUES
(1, 7.00, 7.63),
(3, 8.00, 8.72),
(1, 13.00, 14.17),
(3, 25.00, 27.25);


ALTER TABLE `order cost`
  ADD PRIMARY KEY (`ORDER_COST`),
  ADD KEY `ORDER_ID` (`ORDER_ID`),
  ADD KEY `MENU_COST` (`MENU_COST`);

合计订单


CREATE TABLE `order total` (
  `ORDER_ID` int(11) NOT NULL,
  `ORDER_TOTAL` double(6,2) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


INSERT INTO `order total` (`ORDER_ID`, `ORDER_TOTAL`) VALUES
(1, 0.00),
(3, 0.00);


ALTER TABLE `order total`
  ADD KEY `ORDER_ID` (`ORDER_ID`);

我的加入代码尝试:

SELECT ORDER_ID,
SUM(MENU_COST) = ORDER_TOTAL 
FROM `order cost`
INNER JOIN `order total`
GROUP BY ORDER_ID;

我尝试了多种其他加入想法,并且在主订单成本表中,我能够在运行后获得 SUMS(ORDER_COST) 来创建自己的单元格

SELECT ORDER_ID, SUM(MENU_COST) FROM `order cost` GROUP BY ORDER_ID

但这会在运行后创建自己的表,而我希望根据数据库的更改让表在“订单总数”中自动生成。

标签: sqlphpmyadmin

解决方案


请参阅上面的评论,了解我对不这样做的想法。每次更改 ordercost 表时都必须运行此查询:

UPDATE 
  ordertotal 
SET
  order_total = (
    SELECT SUM(MENU_COST) FROM ordercost WHERE ORDER_ID = x GROUP BY ORDER_ID
  )
WHERE order_id = x

这里没有加入..您将一些新项目插入 ordercost,然后运行查询以同步表。总的来说,这是一个糟糕的主意。您应该考虑改为创建一个 VIEW 并在需要时从中进行选择:

CREATE VIEW ordertotal AS
SELECT 
  ORDER_ID,
  SUM(MENU_COST) as ORDER_TOTAL 
FROM ordercost
GROUP BY ORDER_ID

它将表现得像一张桌子:

SELECT * FROM ordertotal where order_id = 3

推荐阅读