我有一个表格,用于存储已输入的有关垃圾箱中垃圾量的数据。所以我的表看起来像这样:
Material | Weight
===================
Paper | 10
Plastic | 5
Paper | 7
如您所见,我将在表格中包含重复数据。目前,我有多个不同材料的实例,并且它们都附有不同的重量值。
在PHP中是否可以获取这些重复的条目,将它们合并到一个条目中,然后显示它们?那么代码将需要10Kg的纸张并将其添加到表格中的另一个纸张实例(7Kg)然后输出值?
我在MySQL中尝试了GROUP BY
,但所有这些都将组合所有条目并给我顶级记录的值,这是不对的。
谢谢!
答案 0 :(得分:3)
使用带有SUM
列的MySql。这将为每个分组总结该列的所有值。这假设重量栏只是一个数字(10而不是10公斤)。
SELECT
`material`,
SUM(`weight`) AS `weight`
FROM `material_weights`
GROUP BY `material`
如果重量栏不仅仅是一个数字(10公斤而不是10公斤),那么就会出现问题。
如果所有权重都在KG中,那么您应该从每个权重中删除“kg”值,并将权重列从文本转换为数字列。
如果有不同种类的重量(KG,LB,G等),那么最好的方法是在表格中增加一个字段,将重量转换为KG。
答案 1 :(得分:1)
由于您的所有数据似乎都在字符串中,因此使用php迁移脚本检查数据然后组合重复项似乎最好。您要做的第一件事是确定哪些材料有重复。
SELECT材料FROM {TABLE} GROUP BY材料有COUNT(*)> 1;
从那里你应该遍历返回的材料,并使用材料值获取所有行。
SELECT * FROM {TABLE} WHERE Material ='{$ material}';
这将为您提供标记为Material的所有行。从那里,将任何转换(例如,如果有值标记为g的情况下)应用于数值,以确保您对相同类型的值进行操作。然后,您将删除具有该类型材料的所有行。 (你有备份,对吗?)
DELETE FROM {TABLE} WHERE Material ='{$ material}';
最后,插入您刚刚确定的值。
INSERT INTO {TABLE}(材料,重量),('$ material','$ weight');
答案 2 :(得分:1)
SELECT
material,
SUM(CAST(REPLACE(weight, 'kg', '') AS UNSIGNED)) AS weightsum
FROM
tbl
GROUP BY
material
您可以将SUM()
功能与GROUP BY
一起使用,以获得每种唯一材料的重量总和。在您的情况下,您的weight
字段似乎是一个字符串。您可以使用REPLACE
从每个值中取出“kg”,然后将其转换为整数,然后传递给SUM()
。