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

Php 使用Union或Join在where语句中使用多个查询结果,php,mysql,Php,Mysql,我需要组合3个求和查询的结果,并在循环中回显结果。我被困在如何以正确的方式完成这件事上。我想使用while循环为每个客户机回显一行,该行显示按客户机名称分组的3个sum查询的结果: 客户名称|应付总额|现金销售应付总额|赊销应付总额 结果显示所有应归于客户机。 noncashresult显示信用销售应向客户支付的所有款项。 cashresult显示现金销售给客户的所有款项 $result = mysql_query("SELECT `client_name` As `Client`, SUM(`

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

客户名称|应付总额|现金销售应付总额|赊销应付总额

结果显示所有应归于客户机。 noncashresult显示信用销售应向客户支付的所有款项。 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扩展,您可以使用以下内容:

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扩展,您可以使用以下内容:

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扩展,您可以使用以下内容:

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

Hi Craig,如果是我,我会将每个查询的结果收集到由客户端组织的数组中。然后,您可以简单地打印出每个客户端的信息,同时在数组中循环。我错过什么了吗?或者,看起来您可能能够在每个查询之间使用联合,并获取所需内容(联合要求每个列的别名相同,这可能会使您的结果难以理解/保留每个结果的含义)。嗨,Craig,如果是我,我会将每个查询的结果收集到客户机组织的数组中。然后,您可以简单地打印出每个客户端的信息,同时在数组中循环。我错过什么了吗?或者,看起来您可能能够在每个查询之间使用联合,并获取所需内容(联合要求每个列的别名相同,这可能会使您的结果难以理解/保留每个结果的含义)。嗨,Craig,如果是我,我会将每个查询的结果收集到客户机组织的数组中。然后,您可以简单地打印出每个客户端的信息,同时在数组中循环。我错过什么了吗?或者,看起来您可能能够在每个查询之间使用联合,并获取所需内容(联合要求每个列的别名相同,这可能会使您的结果难以理解/保留每个结果的含义)。嗨,Craig,如果是我,我会将每个查询的结果收集到客户机组织的数组中。然后,您可以简单地打印出每个客户端的信息,同时在数组中循环。我错过什么了吗?或者,看起来您可能能够在每个查询之间使用联合,并获取您要查找的内容(除非联合要求每个列的别名相同,这可能会使您的结果难以理解/保留每个结果的含义)。谢谢,这里有错别字,我刚刚编辑了它-现在就尝试。非常感谢。现在我需要学习理解这个查询。它很简单,
SUM(当'paymenttype`='Credit'然后'due'u to'u client`否则0结束时)
意味着检查每一行,如果
'paymenttype`='Credit'
则添加
due'u to'u client
值,否则将
0
添加到每个获得付款批准的客户处。SUM(当'paymenttype`='Credit'然后'due'u to'u client`否则0结束时)意味着检查每一行,如果
'paymenttype`='Credit'
则添加
due'u to'u client
值,否则将
0
添加到每个获得付款批准的客户处。SUM(当'paymenttype`='Credit'然后'due'u to'u client`否则0结束时)意味着检查每一行,如果
'paymenttype`='Credit'
则添加
due'u to'u client
值,否则将
0
添加到每个获得付款批准的客户处。SUM(当'paymenttype`='Credit'然后'due'u to'u client'否则0 END时)意味着检查每一行,如果
'paymenttype`='Credit'
则添加
due'u to'u client
值,否则将
0
添加到每个获得付款批准的客户处=/Yes