2011-03-15 37 views
0

请帮助:Php Mysql帮助。结合2个MySQL表,并提供报告

我有2个表。例子:

  1. 客户(包括ID,姓名,电子邮件等)
  2. 订单(包含订单ID,OWNERID(= Customers.id),paymentstatus等)

我想运行一个该查询可显示客户表中的所有客户名称,并显示该客户使用订单表的总数,未付款和已付款订单数。

例子:

---------------------------- 
| Customer | Paid | Unpaid | TotalOrders 
---------------------------- 
| cus_a | 2000 | 5000 | 7000 
| cus_b | 1680 | 4880 | xxxx 
| cus_b | 5780 | 3720 | xxxx 
---------------------------- 

您的帮助将不胜感激请。

回答

0
select 
    c.name, 
    ifnull(sum(case when paymentstatus = 'Paid' then amount end), 0) Paid, 
    ifnull(sum(case when paymentstatus != 'Paid' then amount end), 0) Unpaid, 
    ifnull(sum(o.amount),0) as TotalOrders 
from customer c 
left join orders o on o.ownerid=c.id 
group by c.id, c.name 

如果你没有,你正在总结的量柱,只是使用COUNT代替

select 
    c.name, 
    count(case when paymentstatus = 'Paid' then amount end) Paid, 
    count(case when paymentstatus != 'Paid' then amount end) Unpaid, 
    count(o.ownerid) as TotalOrders 
from customer c 
left join orders o on o.ownerid=c.id 
group by c.id, c.name 
+0

非常感谢您的帮助我,但当我在第一个答案中运行查询时,我得到了“未知列支付在fieldlist中”,当我在第二个答案中运行查询时,我得到“栏目列表中的未知列数量”。我有一列PAYMENTSTATUS,其中包含支付和未支付的条目。我没有任何名称为Paid或Unpaid的专栏。另外我没有总金额。我只想统计总订单(PATMENTSTATUS字段中的总记录),未付订单(PATTERNTATUS字段中)和付款订单(PATTERNTATUS字段中)。再次感谢您的帮助.. – 2011-03-16 01:04:07

+0

@Haider答案更新 – RichardTheKiwi 2011-03-16 01:09:09

+0

谢谢理查德。你的代码完全帮助了我。我只是修改了一下,它按我的预期工作了100%。下面是修改后的代码: 选择 c.name, 计数(情况下,当paymentstatus = '付费' 然后paymentstatus端)tPaid, 计数(当paymentstatus = '付费' 然后paymentstatus端情况下!)tUnpaid, 计数(邻.ownerid)作为TotalOrders from imgup_users c 左加入订单o on.ownerid = c.id group by c.id,c.name 我非常感谢你和所有试图帮助我的人。对此,我真的非常感激。你和计算器都很棒!再次感谢! – 2011-03-16 11:13:35

0

尝试使用左外连接。

SELECT 
    c.*, 
    count(o.paid) as paid, 
    count(o.unpaid) as unpaid 
FROM 
    customers c 
    LEFT OUTER JOIN Order 
     ON c.id = o.ownerid 
+0

非常感谢你试图帮助我,可当我运行查询在第一个答案中,我得到了“在字段列表中支付的未知列”,当我在第二个答案中运行查询时,我得到“列表中的未知列数”。我有一列PAYMENTSTATUS,其中包含支付和未支付的条目。我没有任何名称为Paid或Unpaid的专栏。另外我没有总金额。我只想统计总订单(PATMENTSTATUS字段中的总记录),未付订单(PATTERNTATUS字段中)和付款订单(PATTERNTATUS字段中)。再次感谢您的帮助... – 2011-03-16 01:00:12