2

我的数据库结构

我从我的数据库开始。

页表

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

问题

  • 我可以使用 SQL 获取 page_id 11 并爬上该 id 的所有父母,直到我到达 parent_id 0 吗?
  • 父母总数不详。

也许是虚拟表?

这是我能想到的,一个虚拟表。只是一个想法,可能不是正确的方法。

id    parent_id_1    parent_id_2    parent_id_3    parent_id_4    parent_id_5
-----------------------------------------------------------------------------
11    8              7              4              2              0
4

3 回答 3

0

它可能不优雅,但有一种聪明的方法可以在不使用“连接方式”的情况下解决问题 -邻接列表模型

于 2012-11-20T16:17:07.500 回答
0

使用MySql没有聪明而优雅的方法

于 2012-11-20T16:08:44.507 回答
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

顺便说一句,您想要的输出是错误的;)

于 2012-11-20T16:38:16.110 回答