1

我有一个表格,存储已输入的有关放入垃圾箱的废物量的数据。所以我的表是这样的:

Material  |  Weight
===================
Paper     |  10
Plastic   |  5
Paper     |  7

如您所见,我将在表中包含重复的数据。目前我有多个不同材料的实例,它们都有不同的权重值。

在 PHP 中是否有可能获取这些重复的条目,将它们组合成一个条目,然后显示它们?所以代码会取 10Kg 的纸并将其添加到表中的另一个纸实例(7Kg)中,然后输出值?

我已经GROUP BY在 MySQL 中尝试过,但所做的只是结合所有条目并给我最高记录的值,这是不对的。

谢谢!

4

3 回答 3

3

使用 MySql,有一个SUM列。这将为每个分组汇总该列的所有值。这是假设重量列只是一个数字(10 而不是 10kg)。

SELECT 
    `material`, 
    SUM(`weight`) AS `weight` 
FROM `material_weights` 
GROUP BY `material`

如果重量栏不只是一个数字(10 公斤而不是 10),那么就会有问题。

如果所有重量都以 KG 为单位,那么您应该从每个重量中删除“kg”值,并将重量列从文本转换为数字列。

如果有不同类型的权重(KG、LB、G 等),那么最好的方法是在表格中多出一个字段,将权重转换为 KG。

于 2012-06-17T23:09:06.523 回答
1

由于您的所有数据似乎都在字符串中,因此您最好使用 php 迁移脚本来检查您的数据,然后合并重复项。您要做的第一件事是确定哪些材质有重复项。

从{TABLE} GROUP BY Material HAVING COUNT(*) > 1 中选择材料;

从那里你应该遍历返回的材料,并获取所有具有材料值的行。

SELECT * FROM {TABLE} WHERE Material = '{$material}';

这将为您提供所有标记为该材质的行。从那里,对数值应用任何转换(以防万一有标记为 g 的值),以确保您对相同类型的值进行操作。然后,您将删除所有具有该类型材料的行。(你有备份,对吧?)

从 {TABLE} 中删除 Material = '{$material}';

最后,插入您刚刚确定的值。

INSERT INTO {TABLE} (材料, 重量), ('$material', '$weight');

于 2012-06-17T23:12:43.573 回答
1
SELECT 
    material, 
    SUM(CAST(REPLACE(weight, 'kg', '') AS UNSIGNED)) AS weightsum
FROM
    tbl
GROUP BY
    material

您可以使用SUM()with 函数GROUP BY来获取每种独特材料的重量总和。在您的情况下,您的weight字段似乎是一个字符串。您可以使用 简单地从每个值中取出“kg” REPLACE,然后将其转换为整数,然后将其传递给SUM().

于 2012-06-17T23:21:34.477 回答