【问题标题】:Use Union or Join to use multiple query results in a where statement使用 Union 或 Join 在 where 语句中使用多个查询结果
【发布时间】:2014-07-16 06:32:44
【问题描述】:

我需要合并 3 个求和查询的结果并在循环中回显结果。我被困在如何以正确的方式完成这项工作。我想使用 while 循环为每个客户端回显一行,显示按客户端名称分组的 3 个总和查询的结果:

客户名称 |到期总额 |现金销售应付总额 |赊销欠款总额

结果显示全部归功于客户。 noncashresult 显示全部归功于 Credit sales 的客户。 cashresult 显示所有应付现金销售的客户。

$result = mysql_query("SELECT `client_name` As `Client`, SUM(`due_to_client`) As `Total Due` 
FROM `Consignment` 
WHERE `payout_approved` = 'Yes' 
GROUP BY `client_name`"); 

$noncashresult = mysql_query("SELECT `client_name` As `Client`, SUM(`due_to_client`) As `Credit Total Due`
FROM `Consignment` 
WHERE `payout_approved` = 'Yes' AND `paymenttype` IN ('Credit') 
GROUP BY `client_name`");

$cashresult = mysql_query("SELECT `client_name` As `Client`, SUM(`due_to_client`) As `Cash Total Due`
FROM `Consignment` 
WHERE `payout_approved` = 'Yes' AND `paymenttype` IN ('Cash') 
GROUP BY `client_name`");

while($row = mysql_fetch_array($result))
                    {
                echo $row['Client'];
                echo $row['Total Due'];
                echo $row['Credit Total Due'];
                echo $row['Cash Total Due'];
                    }

【问题讨论】:

  • 嗨 Craig,如果是我,我会将每个查询的结果收集到由客户端组织的数组中。然后,您可以在遍历数组时简单地打印出每个客户端信息。我错过了什么吗?或者,您似乎可以在每个查询之间使用 UNION 并获得您要查找的内容(除非 UNION 要求每列的别名相同,这可能会使您的结果难以理解/保留每个结果的含义)。

标签: php mysql


【解决方案1】:

你可以使用类似的东西:

SELECT `client_name` As `Client`,
SUM(`due_to_client`) As `Total Due`,
SUM(CASE WHEN `paymenttype`='Credit' THEN `due_to_client` ELSE 0 END) As `Credit Total Due`,
SUM(CASE WHEN `paymenttype`='Cash' THEN `due_to_client` ELSE 0 END) As `Cash Total Due`
FROM `Consignment` 
WHERE `payout_approved` = 'Yes' 
GROUP BY `client_name`

这应该会产生结果:

Client | Total Due | Credit Total Due | Cash Total Due

当然,尽量避免使用 mysql_* 扩展,而这在 mysql 5.5.x 中已被弃用。而是使用 mysqli 或 pdo 扩展名

【讨论】:

  • 谢谢,有错字,我刚刚编辑了它-现在试试吧
  • 做到了。谢谢你。现在我需要学习理解查询。
  • 这很简单,SUM(CASE WHEN `paymenttype`='Credit' THEN `due_to_client` ELSE 0 END) 表示检查每一行,如果 `paymenttype`='Credit' 然后添加 due_to_client 值,否则将 0 添加到每个客户端,其中 payout_approved='Yes'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-20
  • 2012-11-26
  • 2015-07-04
  • 2018-06-26
  • 2023-03-21
  • 1970-01-01
相关资源
最近更新 更多