1

ビンに入れられた廃棄物の量に関して入力されたデータを格納するテーブルがあります。したがって、私のテーブルは次のようになります。

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

ご覧のとおり、テーブルに重複したデータがあります。現時点では、異なるマテリアルの複数のインスタンスがあり、それらにはすべて異なる重み値が付加されています。

PHP でこれらの重複したエントリを取得し、それらを 1 つのエントリに結合してから表示することは可能ですか? コードは 10Kg の紙を取り、それをテーブル内の紙の他のインスタンス (7Kg) に追加して、値を出力しますか?

MySQL でを試してみましたGROUP BYが、すべてのエントリを結合してトップ レコードの値を取得するだけで、正しくありません。

ありがとう!

4

3 に答える 3

3

列でMySqlを使用しSUMます。これにより、グループごとに、その列のすべての値が合計されます。これは、重量列が単なる数字 (10 kg ではなく 10) であると想定しています。

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

重量の列が単なる数値でない場合 (10 ではなく 10kg)、問題が発生します。

すべての重量が KG 単位の場合は、各重量から「kg」の値を削除し、重量列をテキストから数値列に変換する必要があります。

さまざまな種類の重量 (KG、LB、G など) がある場合、最適な方法は、テーブルに追加のフィールドを作成し、重量を KG に変換することです。

于 2012-06-17T23:09:06.523 に答える
1
SELECT 
    material, 
    SUM(CAST(REPLACE(weight, 'kg', '') AS UNSIGNED)) AS weightsum
FROM
    tbl
GROUP BY
    material

SUM()関数を で使用して、GROUP BY一意のマテリアルごとの重量の合計を取得できます。あなたの場合、weightフィールドは文字列のように見えます。を使用して各値から「kg」を取り出し、REPLACEそれを整数に変換してから に渡すことができSUM()ます。

于 2012-06-17T23:21:34.477 に答える
1

すべてのデータが文字列になっているように見えるため、php 移行スクリプトを使用してデータを調べ、重複を結合するのが最善の方法のようです。最初に行うことは、重複しているマテリアルを特定することです。

SELECT Material FROM {TABLE} GROUP BY Material HAVING COUNT(*) > 1;

そこから、戻ってきたマテリアルをループして、Material 値を持つすべての行を取得する必要があります。

SELECT * FROM {TABLE} WHERE 材料 = '{$材料}';

これにより、そのマテリアルとラベル付けされたすべての行が表示されます。そこから、同じタイプの値を操作していることを確認するために、数値に変換を適用します (たとえば、g というラベルの付いた値がある場合に備えて)。次に、そのタイプのマテリアルを含むすべての行を削除します。(バックアップはありますよね?)

DELETE FROM {TABLE} WHERE Material = '{$material}';

最後に、先ほど決定した値を挿入します。

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

于 2012-06-17T23:12:43.573 に答える