【问题标题】:Php Mysql help. Combine 2 mysql tables and provide a reportphp Mysql 帮助。合并2个mysql表并提供报告
【发布时间】:2011-03-15 23:09:41
【问题描述】:

请帮忙:

我有 2 张桌子。例子:

  1. 客户(包含 ID、姓名、电子邮件等)
  2. 订单(包含 orderid、ownerid(=Customers.id)、paymentstatus 等)

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

例子:

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

非常感谢您的帮助。

【问题讨论】:

    标签: php mysql


    【解决方案1】:
    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
    

    【讨论】:

    • 非常感谢您尝试帮助我,但是当我在第一个答案中运行查询时,我得到“在字段列表中支付的未知列”,当我在第二个答案中运行查询时,我获取“字段列表中的未知列数量”。我有一列 PAYMENTSTATUS 包含已付和未付条目。我没有任何名称为“付费”或“未付费”的列。我也没有合计金额。我只想计算订单总数(PATMENTSTATUS 字段中的总记录)、未付款订单(PATMENTSTATUS 字段中)和已付款订单(PATMENTSTATUS 字段中)。再次感谢您的帮助..
    • 谢谢理查德。您的代码完全帮助了我。我只是对其进行了一些修改,它按我的预期工作 100%。这是修改后的代码:select c.name, count(case when paymentstatus = 'Paid' then paymentstatus end) tPaid, count(case when paymentstatus != 'Paid' then paymentstatus end) tUnpaid, count(o.ownerid) as TotalOrders来自 imgup_users c left join orders o on o.ownerid=c.id group by c.id, c.name 我真的很感谢你和所有试图帮助我的人。对此,我真的非常感激。你和stackoverflow都很棒!!!再次感谢!
    • 嗨,理查德,您的查询对我帮助很大,但现在我有一个新场景,请您帮忙。上面的查询用于找出所有具有唯一 ID 的用户的总未付订单,但我添加了一些子账户,所以我现在需要在主账户中包含子账户的计费/未付订单。为此,我在主帐户中添加了一个列,其中包含子帐户的所有 ID,以便我可以找到所有到期订单,如 SELECT SUM(PRICE) FROM TABLE WHERE PAYMENTSTATUS='UNPAID' AND IDS in (CONCATE('ID' , ',' , LINKEDSUBACCOUNTS))。希望这有意义吗?
    【解决方案2】:

    尝试使用左外连接。

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

    【讨论】:

    • 非常感谢您尝试帮助我,但是当我在第一个答案中运行查询时,我得到“在字段列表中支付的未知列”,当我在第二个答案中运行查询时,我获取“字段列表中的未知列数量”。我有一列 PAYMENTSTATUS 包含已付和未付条目。我没有任何名称为“付费”或“未付费”的列。我也没有合计金额。我只想计算订单总数(PATMENTSTATUS 字段中的总记录)、未付款订单(PATMENTSTATUS 字段中)和已付款订单(PATMENTSTATUS 字段中)。再次感谢您的帮助...
    猜你喜欢
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2012-03-01
    • 2022-11-08
    • 2010-10-15
    相关资源
    最近更新 更多