Mysql选择查看Hierarchy

时间:2014-06-19 23:47:05

标签: php mysql sql 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),但我不知道它是否会影响性能。

1 个答案:

答案 0 :(得分:0)

一种相当标准的方法是使用@var来跟踪父级:

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

fiddle