我有一个表“类别”和一个表“产品”。类别 4深度级别。
表类别有一个引用同一个表的外键category_fk
,以及一个带有modrewrite URL部分的字段。该字段名为mr
。
产品具有引用表类别
的外键category_fk
只有最后一个级别的类别才有产品,但最后一个类别的深度并不总是4.类别可能只有2个或3个级别。
我的问题是:是否可以执行一个返回所有连接mr
字段的查询,例如此cat1/cat2/cat3
,或者所有结构都没有写入所有左连接和表类别的别名,如“as c1 “,”作为c2“?
答案 0 :(得分:0)
使用您描述的表结构是不可能的,但如果您采用嵌套集模型,则可能。文章Managing Hierarchical Data in MySQL描述了它(与其他模型一样)。
答案 1 :(得分:0)
基于这种结构
create table category (id int, mr varchar(10), category_fk int);
create table products (id int, name varchar(100), category_fk int);
insert category values
(1, 'cat1', null),(2, 'cat2', 1),(3, 'cat3', 2),(4, 'cat4', 3),
(5, 'cat5', null),(6, 'cat6', null),(7, 'cat7', 5);
insert products values
(1, 'product A', 4),
(2, 'product B', 3),
(3, 'product C', 5),
(4, 'product D', 7),
(5, 'product E', 7),
(6, 'product F', 1);
查询
select p.name, substr(concat(
ifnull(concat('/',c4.mr),''),
ifnull(concat('/',c3.mr),''),
ifnull(concat('/',c2.mr),''),
ifnull(concat('/',c1.mr),'')),2)
from products p
left join category c1 on p.category_fk = c1.id
left join category c2 on c1.category_fk = c2.id
left join category c3 on c2.category_fk = c3.id
left join category c4 on c3.category_fk = c4.id
注释