在mysql中建立樹形結構

在mysql中建立樹形結構

 

這個不是什麼新東西瞭,網上有很多方法,我也嘗試瞭其中好的方法,都不盡人意,這是我最後我推薦的方法,共享一下,大傢一起討論,當然難如高手法眼,呵呵。我就直接貼代碼瞭,有問題就聯系我。

 

mysql中要有樹形結構我認為表中應該有如寫字段:

 

舉例菜單表menu:

  www.aiwalls.com  

[sql]  

create table menu  

(  

   id                   int not null auto_increment,  

   pid                  int,  

   name                 varchar(100) not null,  

   nlevel               int,  

   scort                varchar(8000),  

   primary key (id)  

)  

type = InnoDB;  

  

alter table menu add constraint FK_Reference_67 foreign key (pid)  

      references menu (id) on delete restrict on update restrict  

 創建存儲過程genNode_menu:

 

[sql]  

BEGIN  

 DECLARE Level int ;  

 Set Level=0 ;  

 update menu a inner join (SELECT id,Level,concat(',',ID,',') scort FROM menu WHERE pid is null) b on a.id=b.id    www.aiwalls.com  

 set a.nlevel=b.level,a.scort=b.scort;  

 WHILE FOUND_ROWS()>0 DO  

  SET Level=Level+1;  

update menu a inner join (  

   SELECT ID,Level,scort FROM menu   

    WHERE nLevel=Level-1) b on a.pid=b.id  

 set a.nlevel=b.level,a.scort=concat(b.sCort,a.ID,',');  

 END WHILE;  

END  

插入數據:

[sql]  

INSERT INTO menu VALUES ('1', null, '菜單1', null, null);  

INSERT INTO menu VALUES ('2', '1', '菜單1-1', null, null);  

INSERT INTO menu VALUES ('3', null, '菜單2', null, null);  

INSERT INTO menu VALUES ('4', '3', '菜單2-1', null, null);  

INSERT INTO menu VALUES ('5', '4', '菜單2-1-1', null, null);  

  www.aiwalls.com  

執行存儲過程:

[sql]  

call genNode_menu;  

我們看一看menu表現在是什麼情況瞭:

 

很好,就是這個效果

 

現在可以按你的需求隨便查詢瞭:

 

比如:

 

[sql]  

select * from menu a where a.scort not like '%,1,%' order by a.scort  

 

 

 

作者 lifaming15

發佈留言