簡體   English   中英

Mysql選擇以查看層次結構

[英]Mysql select to view Hierarchy

我正在開發一種使用php和mysql存儲文件的方法。 我在這段SQL中遇到了“思想凍結”

所以,我有這張桌子:

IDIGORDISKFOLDER   NAME       PARENT
1                  |/             |(null)
6                  |subfolderl2   |2
3                  |/             |(null)
4                  |pics          |1
5                  |/             |0
6                  |subfolderl2   |2
7                  |subfolderl3   |6

我正在嘗試得到這樣的東西:讓父母獲得身份證號碼7

IDIGORDISKFOLDER   NAME       PARENT
7                  |subfolder13   |6
6                  |subfolderl2   |2
6                  |subfolderl2   |2
1                  |/             |(null)

經過廣泛的搜索,我創建了以下(SQL)代碼:

DROP PROCEDURE IF EXISTS getTopParents;
delimiter //
DROP PROCEDURE IF EXISTS getTopParents;
CREATE PROCEDURE getTopParents(in someId int)
BEGIN
declare pid int default NULL;
SELECT parent into pid from igorDiskFolder WHERE idigorDiskFolder = someId;
    if (pid is not NULL) then
        select idigorDiskFolder, name, parent from igorDiskFolder where idigorDiskFolder = someId;
        CALL getTopParents(pid);
    end if;
END //
delimiter ;

call getTopParents(2);

但是,由於某種原因,我無法使其運行。 SELECT語句本身正在運行。 “聲明”似乎引發了錯誤。 我也嘗試使用SET @pid,但是沒有運氣。 如果有幫助,請查看此無效的小提琴: http ://sqlfiddle.com/#!2/ e3cc6/2

另外,我願意通過PHP和MySQL(i)進行此操作,但我不知道它是否會影響性能。

一個相當標准的方法是使用@var跟蹤父級:

select idigorDiskFolder, name, @id := parent parent
from (select * from igorDiskFolder order by parent desc) a
join (select @id := 7) b
where idigorDiskFolder = @id;

小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM