繁体   English   中英

php MySQL 多对多条件 Group By

[英]Php MySQL Many to Many to Many condition Group By

我正在多个多对多关系表之间创建一个查询,以便将它们的值链接在一起。 我的问题是我似乎无法找到一种方法来按此查询中“服务”子表中的“服务”值分组:

SELECT 
    GROUP_CONCAT(containers.container_id ORDER BY containers.container_id DESC) AS container_id, 
    GROUP_CONCAT(containers.container_serial ORDER BY containers.container_id DESC) AS container_serial, 
    GROUP_CONCAT(containers.container_index ORDER BY containers.container_id DESC) AS container_index, 
    invoices.*, 
    statuses.status, 
    clients.client, 
    GROUP_CONCAT(services.service_id ORDER BY containers.container_id DESC) AS service_id, 
    GROUP_CONCAT(services.service ORDER BY containers.container_id DESC) AS service 
FROM containers_invoices 
LEFT JOIN containers 
    ON containers_invoices.container_id = containers.container_id 
LEFT JOIN invoices 
    ON containers_invoices.invoice_id = invoices.invoice_id 
LEFT JOIN statuses 
    ON invoices.status_id = statuses.status_id 
LEFT JOIN clients 
    ON invoices.client_id = clients.client_id 
LEFT JOIN invoices_services 
    ON invoices.invoice_id = invoices_services.invoice_id 
LEFT JOIN services 
    ON invoices_services.service_id = services.service_id 
GROUP BY containers_invoices.invoice_id 
ORDER BY invoice_id DESC 

现在我的结果看起来像这样:

  1. C09-65475u76u76, C08-dfsgreg345g3 - 114 - ? - 服务,服务 - 1000 - 已发送
  2. C09-65475u76u76、C08-dfsgreg345g3、C03-dfsdfsd、C02-sadasd - 117 - ? - 线,线,线,线 - 3000 - 付费

该服务应该只显示一次,并且不会像我拥有的​​容器编号那样循环多次。 我知道我很接近,但我似乎无法缩小解决方案的差距。 谢谢你的帮助!

您正在按发票分组:

GROUP BY containers_invoices.invoice_id 

根据我的理解,您应该按服务分组

GROUP BY services.service_id 

编辑:我想我误解了这个问题。 您希望每张发票保留一行,但在您的 group_concat 中没有列出多次相同的值。

如果是这样,您可以使用 DISTINCT 关键字:

GROUP_CONCAT(DISTINCT services.service ORDER BY containers.container_id DESC) AS service 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM