我的数据库结构
我从数据库开始。
页面表
id content
-------------
2 My content
4 Another content
7 Example content
8 Test content
11 Some content
家长表
id page_id parent_id
--------------------------
1 2 0
2 4 2
3 7 2
4 8 7
5 11 8
parents_table.page_id
已与pages_table.id
。
问题
也许是虚拟桌子?
这是我能想到的,一个虚拟表。只是一个想法,可能不是正确的方法。
id parent_id_1 parent_id_2 parent_id_3 parent_id_4 parent_id_5
-----------------------------------------------------------------------------
11 8 7 4 2 0
答案 0 :(得分:0)
使用MySql没有聪明而优雅的方法 在Oracle中,您可以通过它进行连接Connect by
答案 1 :(得分:0)
可能不是elegant,但有一种聪明的方法可以在不使用'connect by'的情况下解决问题 - Adjacency List Model
答案 2 :(得分:0)
为什么不使用存储过程?
create table hier
(id int, page_id int, parent_id int);
insert into hier values
(1 , 2, 0),
(2 , 4 , 2),
(3 , 7 , 2),
(4 , 8 , 7),
(5, 11 , 8);
drop procedure if exists getHier;
delimiter $$
create procedure getHier(start int)
begin
select @parent_id:=parent_id from hier where page_id = start;
drop table if exists result;
create temporary table result
(id int primary key auto_increment,
page_id int);
insert into result (page_id) values (@parent_id);
while @parent_id != 0 DO
insert into result (page_id)
select @parent_id:=parent_id from hier where page_id = @parent_id;
end while;
select page_id from result order by id;
end $$
delimiter ;
然后做
call getHier(11)
结果:
page_id
8
7
2
0
BTW,你想要的输出是错误的;)