0

タスク: 各販売員が毎月販売した製品の合計数量を見つけて、レポートを作成します。営業担当者に外側のループを使用し、SUM() クエリを持つ内部ループを各営業担当者に対して 12 回使用し、データを多次元配列に格納しました。 .

問題: 内部ループでクエリを使用すると、product_quantity 列の合計が表示されません。特定の ID と月に対してループ外でクエリを使用すると、クエリはその月の売上を正しく合計します。したがって、ホエイは内側のループで機能しないクエリです。営業担当者ごとにクエリを 12 回呼び出すと、プロセスが非効率になるためでしょうか。それを行うより良い方法はありますか?

            while($salesperson=mysql_fetch_array($qry1))
        {
            $postData[$i]=$salesperson['name'];
            echo $postData[$i];
            echo "</br> ";
            $m=1;
          while($m<=3)
            {
                $qry2=mysql_query("Select SUM(addsales.product_quantity) AS Total from addsales where sid='".$salesperson['sid']."' AND month='".$m."'");
                echo $qry2;
                echo "</br>";
                $total=mysql_fetch_array($qry2);

                    if($total['Total']!=0)
                    {
                        $postData[$i][$m]=$total['Total'];
                        echo $postData[$i][$m];
                    }
                    else
                    {    $postData[$i][$m]=0;
                    echo $postData[$i][$m];}


                $m++;
                echo "</br>";
            }
            $size--;
            $i++;
        }
        echo "</br>";

        mysql_close($con);

        $i=1;

?>
4

1 に答える 1

0

データベースの観点から見ると、外部ループと内部ループは非効率的です。実際に必要なものに近い SQL クエリを送信すると、はるかに少ないデータベース ラウンドトリップで同じ結果が得られるからです。

SELECT s.sid, s.name, 
(SELECT SUM(a1.product_quantity) FROM addsales a1 
 WHERE a1.sid = s.sid AND a1.month = '1'
) AS month1sold,
(SELECT SUM(a2.product_quantity) FROM addsales a2 
 WHERE a2.sid = s.sid AND a2.month = '2'
) AS month2sold,
(SELECT SUM(a3.product_quantity) FROM addsales a3 
 WHERE a3.sid = s.sid AND a3.month = '3'
) AS month3sold,
(SELECT SUM(a4.product_quantity) FROM addsales a4 
 WHERE a4.sid = s.sid AND a4.month = '4'
) AS month4sold,
(SELECT SUM(a5.product_quantity) FROM addsales a5 
 WHERE a5.sid = s.sid AND a5.month = '5'
) AS month5sold,
(SELECT SUM(a6.product_quantity) FROM addsales a6 
 WHERE a6.sid = s.sid AND a6.month = '6'
) AS month6sold,
(SELECT SUM(a7.product_quantity) FROM addsales a7 
 WHERE a7.sid = s.sid AND a7.month = '7'
) AS month7sold,
(SELECT SUM(a8.product_quantity) FROM addsales a8
 WHERE a8.sid = s.sid AND a8.month = '8'
) AS month8sold,
(SELECT SUM(a9.product_quantity) FROM addsales a9 
 WHERE a9.sid = s.sid AND a9.month = '9'
) AS month9sold,
(SELECT SUM(a10.product_quantity) FROM addsales a10 
 WHERE a10.sid = s.sid AND a10.month = '10'
) AS month10sold,
(SELECT SUM(a11.product_quantity) FROM addsales a11 
 WHERE a11.sid = s.sid AND a11.month = '11'
) AS month11sold,
(SELECT SUM(a12.product_quantity) FROM addsales a12 
 WHERE a12.sid = s.sid AND a12.month = '12'
) AS month12sold
FROM salesperson s
WHERE ....
于 2012-09-06T06:14:42.753 に答える