1

現在複数の MySQL クエリを使用している集計テーブルを表示しようとしていますが、それらを 1 つに結合できるかどうか疑問に思っていました。

フィールド金額と通貨を含む「支払い」というテーブルがあり、各通貨の要約合計テーブルを表示しようとしています。例として:

<table>
  <tr>
    <td>USD</td>
    <td>EUR</td>
    <td>GBP</td>
  </tr>
  <tr>
  <? $q1 = mysqli_query("SELECT sum(amount) as total_USD from payments WHERE currency='USD'");
  while($row1 = mysqli_fetch_assoc($q1)){ ?>                
    <td><? echo number_format($row1['total_USD'],0); ?></td>
  <? } ?>

  <? $q2 = mysqli_query("SELECT sum(amount) as total_EUR from payments WHERE currency='EUR'");
  while($row2 = mysqli_fetch_assoc($q2)){ ?>                
    <td><? echo number_format($row2['total_EUR'],0); ?></td>
  <? } ?>

  <? $q3 = mysqli_query("SELECT sum(amount) as total_GBP from payments WHERE currency='GBP'");
  while($row3 = mysqli_fetch_assoc($q3)){ ?>                
    <td><? echo number_format($row3['total_GBP'],0); ?></td>
  <? } ?>
  </tr>
</table>

実際には、12 の通貨を使用しているため、12 の個別のクエリがありますが、効率が悪いと感じているので、同じ結果を達成するためのより簡単な方法があるかどうか疑問に思っていました。

どうもありがとう!

4

3 に答える 3

3
SELECT currency,
       SUM(amount) as total
  FROM payments
 GROUP BY currency
于 2013-04-13T09:54:35.983 に答える
2
     Solution 1:
       SELECT currency, SUM(amount) as total FROM payments GROUP BY currency
     Solution 2 :

   $currencies=array(USD,EUR,GBP,...);
    foreach($currencies as $currency){
      $q1= mysqli_query("SELECT sum(amount) as total from payments WHERE currency='".$currency."'");  
     while($row1 = mysqli_fetch_assoc($q1)){                
        echo number_format($row1['total'],0); 
       } 
    }
于 2013-04-13T10:07:00.647 に答える
1

ここで GROUP BY を使用できます。

SELECT currency, SUM(amount) as total FROM payments GROUP BY currency

http://dev.mysql.com/doc/refman/5.1/en/group-by-modifiers.html

于 2013-04-13T09:55:20.290 に答える