【问题标题】:Mysql Join query for reportMysql Join 查询报表
【发布时间】:2021-10-17 05:53:47
【问题描述】:

在我的 MySQL 数据库中,我有 5 个表

表格:产品

product_id product_name
1 PA
2 PB
3 PC
4 PD
3031 PE

表:Product_to_category(产品 - 此表 - OneToMany 关系)

product_id(primary_key) category_id(primary_key)
1 A
2 B
3 C
3031 439
3031 683

表格:类别

category_id parent_id slug
71 0 71-aa
161 71 161-aa
439 161 439-aa
680 0 680-aa
683 680 683-aa

表:Category_description(类别 - 此表 - OneToOne 关系)

category_id category_name
71 AC
161 Split AC
439 1TonAC
680 Offer
683 SummerChill

表:Category_path

category_id(primary_key) path_id(primary_key) level
439 71 0
439 161 1
439 439 2
683 680 0
683 683 1

我想得到类似的结果

product_id product_name category_id category_name slug
3031 PE 71,161,439 Defaut Cagegory / AC, Defaut Cagegory / AC/ Split AC, Defaut Cagegory / AC / Split AC / 1TonAc 71-aa,161-aa,439-aa

注意:这里的 683 被忽略,因为产品的类别不止一个。但我的要求只是第一类。这就是为什么 683 被忽略的原因。如果不能忽略 683,那么应该像 439 一样允许它 另一件事是我需要 GROUP_CONCAT(category_name) 因为我想将现有的电子商务(Opencart CMD)数据导入 Magento 2。给定的结果模式是 Magento 2 的示例导入文件。

category_name 应该是这个模式

“默认类别字符串”+ 分隔符 (/) + “级别 - 0 类别” 分隔符逗号(,)

“默认类别字符串”+ 分隔符 (/) + “级别 - 0 类别/级别 - 1 类别” 分隔符逗号(,)

“默认类别字符串”+ 分隔符 (/) + “级别 - 0 类别/级别 - 1 类别/级别 - 2 类别” 分隔符逗号(,)

【问题讨论】:

  • 为什么您的预期结果包含类别 61,而它不存在(请仔细检查所有内容是否有错别字)?为什么类别 683 似乎被忽略了,或者“默认类别”似乎神奇地出现了(请说明您的要求,而不仅仅是转储数据墙作为示例)?为什么要在单行和列中显示多个结果(逗号分隔的列表是 SQL 反模式)?
  • 对不起,我已经更新了。它应该是 161
  • 产品不止一种。但我只需要第一个。这就是 683 被忽略的原因。
  • SQL 数据集是无序的;没有第一个类别(不是产品),您是指每个产品 ID 最低的类别吗?
  • 是的,最低 id。

标签: mysql join left-join


【解决方案1】:

GROUP_CONCATLEFT JOIN 一起使用。我不知道这是否会返回正确的输出,因为这是未经测试的代码,但查询的逻辑可能会对您有所帮助。

SELECT a.product_id, product_name, GROUP_CONCAT(b.category_id) AS 'category_id', 
REPLACE(GROUP_CONCAT(c.category_name), ',', '/') AS 'category_name', 
GROUP_CONCAT(c.slug) AS 'slug' FROM product a 
LEFT JOIN product_to_category b ON a.product_id=b.product_id
LEFT JOIN category c ON c.category_id=b.category_id
LEFT JOIN category_description d ON c.category_id=d.category_id
WHERE product_id=3031;

【讨论】:

  • @ShojibFlamon 你的意思是没有GROUP_CONCAT
  • 是的,它的作品,但我的要求是 category_name。应该是这个模式
猜你喜欢
  • 2011-09-01
  • 2013-05-10
  • 2015-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多