0

タイトルが意味を成していることを願っています。そうでない場合は、ここで明確にしようと思います。まず、私が扱っている多くのコードと同様に、私はこれを継承したか、単に監視しており、mysqli を使用して書き直す許可を与えられていないため、「あなたは今間違っている投稿をしています」を惜しまないでください。前もって感謝します。

table_1 には次のようなレイアウトがあります

+----+-----------+------------+
| id | from_name | from_email |
+----+-----------+------------+
| 1  |   John    | john@a.com |
| 2  |   Juan    | juan@a.com |
| 3  |   Mark    | mark@a.com |
| 4  |   John    | john@a.com |
+----+-----------+------------+

そして、必要な結果を得るために THIS のようにクエリを実行します。

<?php

    $q = "SELECT `id` FROM `table_1` WHERE `from_email` = 'john@a.com'";
    $r = mysql_query($q) or die(mysql_error()); // mysql_error is removed in production
    $ids = mysql_fetch_assoc($r);

 ?>

これを繰り返してIDを画面に出力すると、期待どおりの結果が得られます。

1
4

次に、これらの ID を取得し、サイズ情報を保持する Table_2 の WHERE 句で使用して、すべてのメッセージの合計サイズを計算できるようにする必要があります。Table_2 は次のようになります。

+----+---------+------------+
| id | table_1 |    size    |
+----+---------+------------+
| 1  |    1    |   44023    |
| 2  |    2    |     372    |
| 3  |    3    |   13243    |
| 4  |    4    |  423115    |
+----+---------+------------+

私の希望するソリューションに基づいて、サイズを取得してそれらを正しく追加できる while または foreach ループを構築できるはずですか? 私は次のことを試しました:

<?php

    $total_size = 0;
    while($ids = mysql_fetch_assoc($r)){
         $q2 = "SELECT `size` FROM `table_2` WHERE `table_1` = '".$ids['id']."'";
         $r2 = mysql_query($q2) or die mysql_error()); // removed in production
         $add = mysql_fetch_assoc($r2);

         $total_size = $total_size + $add['size'];
    }

 ?>

しかし、echo $total_size に行くと、何も表示されず、画面に 0 すら表示されず、MySQL によってスローされるエラーもありません。このテーブルを最初に設計した場合、このデータはすべて同じテーブルにあるでしょうが、そうしなかったので、「機能させる」しかありません。見た目から、それはうまくいくはずです。

4

1 に答える 1

1

@Michael Berkowski - INNER JOIN および SUM() SELECT ステートメントに感謝します。完璧に動作します。

「1 つのクエリでは、簡単なサブクエリの方法を実行できます: SELECT size FROM table_2 WHERE table_1 IN (SELECT id FROM table_1 WHERE email = 'john@a.com') またはより高速な結合方法: SELECT size FROM table_2 INNER JOIN table_1 ON table_2.table_1 = table_1.id WHERE table1.email = 'john@a.com'" – Michael Berkowski

「必要なフェッチ ループは 1 つだけです。実際には、1 つのクエリで集計 COUNT() を実行して、ほとんどすべての PHP をスキップすることもできます。SELECT SUM(size) FROM table_2 INNER JOIN table_1....」 – Michael Berkowski

于 2012-10-26T16:59:53.683 に答える