【问题标题】:Adding totals from multiple tables从多个表中添加总计
【发布时间】:2016-10-14 04:41:30
【问题描述】:

我在 MySQL 上使用 Laravel 和 Eloquent。本质上,我试图从发票中获取结果,包括它们的“总”和“已支付”金额。

我有 4 张桌子:

发票

id int(10),
date_due date,
client_id int(10),
deleted_at datetime

invoices_items

id int(10),
invoice_id int(10),
price decimal(15,2),
quantity int(10)

invoices_payments(这是一个数据透视表,因为付款也可以应用于其他发票)

payment_id int(10),
invoice_id int(10),
amount decimal(15,2)

付款

id int(10),
payment_date date,
total decimal(15,2)

(还有其他字段但不相关)

根据其他一些答案和其他研究,我一直在使用这个查询:

select 
    `invoices`.*, 
    SUM(
        invoices_items.price * invoices_items.quantity
    ) as total ,
    SUM(
        invoices_payments.amount
    ) as paid
from 
    `invoices` 
    left join `invoices_items` on `invoices`.`id` = `invoices_items`.`invoice_id` 
    left join `invoices_payments` on `invoices`.`id` = `invoices_payments`.`invoice_id` 
where
    `invoices`.`deleted_at` is null
limit 
    25

我遇到的问题是结果总是只返回 1 行(测试数据库中有 5 张发票),并且“总计”或“已付款”的金额不正确。

我想补充一点,invoices_payments中可能没有任何记录

-- 解决方案--

这是最后的查询,以防有人遇到类似情况

select 
    `invoices`.*, 
    COALESCE(SUM(
        invoices_items.price * invoices_items.quantity
    ),0) as total, 
    COALESCE(SUM(invoices_payments.amount),0) as paid, 
    COALESCE(SUM(
        invoices_items.price * invoices_items.quantity
    ),0) - COALESCE(SUM(invoices_payments.amount),0) as balance 
from 
    `invoices` 
    left join `invoices_items` on `invoices`.`id` = `invoices_items`.`invoice_id` 
    left join `invoices_payments` on `invoices`.`id` = `invoices_payments`.`invoice_id` 
where 
    `invoices`.`deleted_at` is null 
group by 
    `invoices`.`id` 
order by 
    `balance` desc 
limit 
    25

【问题讨论】:

    标签: mysql laravel eloquent


    【解决方案1】:

    WHERE之后添加GROUP BY invoices.id

    【讨论】:

    • 我想我已经盯着这个太久了。似乎做到了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    相关资源
    最近更新 更多