【发布时间】: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。