1

次のようなMySQLテーブルがあります。

+--------------------------------------+
|   id   |    product_id   |   qty     |
+--------------------------------------+
|    1   |        0        |    1      |
|    2   |        1        |    3      |
|    3   |        0        |    2      |
|    4   |        2        |    18     |
+--------------------------------------+

テーブル内の各製品の合計数を取得したい。たとえば、上記の表の場合、私が望む結果は次のとおりです。

0 -> 3
1 -> 3
2 -> 18

これを行う最も簡単な方法は、MySQL の結果をループして、配列内の product_id に対応する位置に各製品の数量を追加することだと考えました。いいえ:

$qtyArray = array();

while($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
{
    $qtyArray[$row[product_id]] += $row[qty];
}

2 つの質問があります。

  1. 上記はうまくいきますか?
  2. これを行うより良い方法はありますか?

ありがとうございました!

4

3 に答える 3

8

MySQL はこれを行います。

SELECT product_id, sum(qty)
FROM tablename
GROUP BY product_id
于 2012-05-20T21:16:40.403 に答える
1

最初の質問について。動作しますが、「未定義のオフセット」という通知が発行されます

また、配列インデックスは文字列でなければならないことに注意してください。

$qtyArray[$row['product_id']] += $row['qty'];
于 2012-05-20T21:18:10.777 に答える
1

前述のように、グループ クエリを使用する方が効率的です。

でも:

$qtyArray[$row[product_id]] += $row[qty];

変数がすでに設定されていない限り、通知がトリガーされます。これは、次と同等であるためです。

$qtyArray[$row[product_id]] = 
    $qtyArray[$row[product_id]] + // First time around this won't exist
    $row[qty];

(他の状況で)同様のことを行う必要がある場合は、疑問がある場合は配列キーが存在することを確認してください。

于 2012-05-20T21:18:37.393 に答える