php - 使用 Union 或 Join 在一个 where 语句中使用多个查询结果

标签 php mysql

我需要合并 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'];
                    }

最佳答案

你可以使用类似的东西:

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 扩展

关于php - 使用 Union 或 Join 在一个 where 语句中使用多个查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24768988/

相关文章:

php - 为什么这个 PHP 代码不起作用?

php - rabbitmq 在 linux 中发送数据 php

php - mysql ORDER BY "month"与 unixtime

php - 如何在 MySQL/PHP 中选择行?

java - Mysql 复杂对象 Hibernate 批量插入

PHP如何在一周后禁用查询

mysql - 使用特定外键选项查询所有约束

mysql - 如何添加一对多可以为空的FK

mysql - 随机选择 3 行相等的次数

php - 函数参数-数组默认值 |最佳实践