gpt4 book ai didi

php - 组合多个 mySQL 行而不重复

转载 作者:行者123 更新时间:2023-11-29 03:06:04 26 4
gpt4 key购买 nike

我在 MySQL 数据库中有 4 个表,suppliers , categories , subcats & listings .

listings是一个连接表,允许供应商、类别和子类别之间的多对多关系,每个的结构如下

供应商

sp_id      sp_name       sp_email
1 Apple info@apple.co
2 Samsung info@samsung.co

类别

cat_id     cat_name
3 Electronics
4 Software

子类别

subcat_id  subcat_name   cat_id
5 Mobiles 3
6 Computers 3

列表

list_id    sp_id         subcat_id
1 1 5
2 1 6

我正在尝试将数据合并并提取在一起,因此每个供应商只有一个条目,其中列出了多个子类别,例如:

结果

sp_id      sp_name       sp_email         cat_name / cats        subcat_name / subcats
1 Apple info@apple.co Electronics, Software Mobiles, Computers
2 Samsung info@samsung.co Electronics Mobiles

目前我有以下查询

SELECT *
FROM suppliers as s
LEFT JOIN listings as l ON s.sp_id=l.sp_id
LEFT JOIN subcats as p ON p.subcat_id=l.subcat_id
LEFT JOIN categories as c ON c.cat_id=p.cat_id
ORDER BY s.sp_id

然而,这会为每个供应商输出多个条目,每个类别或与其关联的子类别都有一个条目。有没有更简单的方法通过 SQL 或在 PHP 中使用多个查询来完成?

我目前对 mySQL 的了解有限,非常感谢任何正确方向的建议或产品。

最佳答案

使用GROUP_CONCAT

SELECT  s.*, 
GROUP_CONCAT(c.cat_name) catName,
GROUP_CONCAT(p.subcat_name) subcatName
FROM suppliers as s
LEFT JOIN listings as l ON s.sp_id=l.sp_id
LEFT JOIN subcats as p ON p.subcat_id=l.subcat_id
LEFT JOIN categories as c ON c.cat_id=p.cat_id
GROUP BY s.sp_id, s.sp_name, s.sp_email
ORDER BY s.sp_id

关于php - 组合多个 mySQL 行而不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14992566/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com