Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将多个MySQL查询合并为1_Php_Mysql - Fatal编程技术网

Php 将多个MySQL查询合并为1

Php 将多个MySQL查询合并为1,php,mysql,Php,Mysql,我试图显示一个摘要表,该表目前正在使用多个MySQL查询,我想知道是否可以将它们合并为一个 我有一个名为“payments”的表,其中包含字段amount和currency,我正在尝试显示每种货币的汇总汇总表。例如: <table> <tr> <td>USD</td> <td>EUR</td> <td>GBP</td> </tr> <tr>

我试图显示一个摘要表,该表目前正在使用多个MySQL查询,我想知道是否可以将它们合并为一个

我有一个名为“payments”的表,其中包含字段amount和currency,我正在尝试显示每种货币的汇总汇总表。例如:

<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个单独的查询,但感觉效率很低,所以我想知道是否有更简单的方法来实现相同的结果


非常感谢

您可以在此处使用组

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

您可以在此处使用组

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

这就是所谓的聚合函数,谢谢马克!还有其他人谢谢你的帮助。这就是所谓的聚合函数,谢谢马克!还有其他人谢谢你的帮助。Group by worked a treat:)在您的循环中,您使用的是MySQLi,因此您可以使用带有货币绑定变量的prepared语句:使用prepared语句不仅可以防止SQL注入,而且还可以提高性能,因为MySQL不需要在每次执行(只是第一次)时解析语句,因此,在循环中使用绑定变量更有效,也更安全,因为您使用的是MySQLi,所以您可以使用带有货币绑定变量的预处理语句:使用预处理语句不仅可以防止SQL注入,还可以提高性能,因为MySQL不需要每次执行时都解析语句(这是第一次),因此使用绑定变量更有效,也更安全