mysql将2组上的相同列相加

时间:2015-12-21 19:19:26

标签: php mysql mysqli

我有这张桌子:

CREATE TABLE `stock` (
`id` int(11) NOT NULL,
`p_id` int(11) NOT NULL,
`quantity` decimal(11,2) DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

和这张表:

CREATE TABLE `products` (
 `id` int(10) UNSIGNED NOT NULL,
 `codf` bigint(20) UNSIGNED NOT NULL,
 `ean` bigint(20) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

我如何获得每种产品的codf和ean的总量

所以,例如,如果我有这个股票

 id | p_id | quantity |
 1  | 1    | 1        |
 2  | 2    | 2        |
 3  | 1    | 3        |
 4  | 3    | 4        |

和那些产品:

 id | codf | ean |
  1 |   1  |  11 |
  2 |   1  |  12 |
  3 |   2  |  13 |

我需要

 codf 1 = 6
 codf 2 = 4
 ean 11 = 4
 ean 12 = 2
 ean 13 = 4

所以我需要通过不同的代码和不同的ean分组数量分组来计算数量分组,ean也是唯一的

现在我在php中做,我选择所有行,左连接产品,我使用数组对它们进行分组并得到最终数量,如下所示:

select s.quantity, p.codf,p.ean from stock s left join products p on p.id = s.p_id

我有这个php:

 while($r = mysqli_fetch_assoc($q)) {
      $total[$r[ean]] += $r[quantity];
      $total[$r[codf]] += $r[quantity];
  }

并为每种产品显示我们库存的数量

codf = a number for similar products
ean = a unique number a product can have

但是如果我能在mysql中完成它会对我有所帮助

谢谢,对不起,如果我拼错了一些东西,英语不是我的主要语言:)

1 个答案:

答案 0 :(得分:1)

SELECT ce
     , val
     , SUM(quantity) total 
  FROM 
     ( SELECT 'codf' ce, codf val, s.quantity FROM products p JOIN stock s ON s.p_id = p.id
        UNION
       SELECT 'ean' ce, ean, s.quantity FROM products p JOIN stock s ON s.p_id = p.id
     ) x
 GROUP
    BY ce, val;