Php Mysql(条令)正在复制计数结果,可能是因为按分组,但无法找出原因

Php Mysql(条令)正在复制计数结果,可能是因为按分组,但无法找出原因,php,mysql,doctrine,left-join,Php,Mysql,Doctrine,Left Join,我使用doctrine作为ORM层,但通过在我的数据库工具中放置一个简单的mysql查询,我得到了相同的结果。所以我的问题是: 我有一个发票表、发票项目和发票付款表,我希望得到的结果是所有未付款或至少尚未全额付款的发票。我知道查询应该是几乎正确的,因为它返回了正确数量的项目。。。唯一的问题是,它将数量乘以许多可能连接的行 所以我现在的问题是: select invoice.*, sum(item.amount * item.quantity) as totalDue, sum

我使用doctrine作为ORM层,但通过在我的数据库工具中放置一个简单的mysql查询,我得到了相同的结果。所以我的问题是:

我有一个发票表、发票项目和发票付款表,我希望得到的结果是所有未付款或至少尚未全额付款的发票。我知道查询应该是几乎正确的,因为它返回了正确数量的项目。。。唯一的问题是,它将数量乘以许多可能连接的行

所以我现在的问题是:

select  invoice.*, sum(item.amount * item.quantity) as totalDue, 
        sum(payment.amount) as totalPaid 
from invoices as invoice 
    left join invoice_items as item on item.invoice_id = invoice.id 
    left join invoice_payments as payment on payment.invoice_id = invoice.id 
        and payment.status = 'successful' 
where invoice.invoice_number is not null 
and invoice.sent_at is not null 
and invoice.due_date >= '2018-05-15' 
group by invoice.id 
having count(payment.id) = 0 
    or sum(payment.amount) < sum(item.amount * item.quantity) 
order by invoice.issue_date desc, sum(payment.amount) desc;
如您所见,我的选择中也有totalDue和TotalPayment,它们仅供参考,如果查询正确,则应删除它们

我看到的是金额乘以6,因为付款表中有6项


所以也许有人能帮我指出正确的方向,它不会对totalDue进行乘法。我想这可能是因为没有我的查询的group by失败了。

通过在我的查询中简单地使用distinct,我解决了这个问题

select invoice.*, sum(distinct(item.amount * item.quantity)) as totalDue, 
        sum(payment.amount) as totalPaid 
from invoices as invoice 
    left join invoice_items as item on item.invoice_id = invoice.id 
    left join invoice_payments as payment on payment.invoice_id = invoice.id 
        and payment.status = 'successful' 
where invoice.invoice_number is not null 
and invoice.sent_at is not null 
and invoice.due_date >= '2018-05-15' 
group by invoice.id 
having count(payment.id) = 0 
    or sum(payment.amount) < sum(distinct(item.amount * item.quantity)) 
order by invoice.issue_date desc, sum(payment.amount) desc;

我要感谢所有花时间重新设计我的问题的人-

供日后参考,,如果我们可以阅读你的代码,那么更有可能有人会停下来阅读它的sumpayment.amount