【问题标题】:Mysql select to view HierarchyMysql 选择查看层次结构
【发布时间】:2014-06-19 23:47:05
【问题描述】:

我正在开发一种使用 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) 来做这件事,但我不知道它是否会影响性能。

【问题讨论】:

  • 您发布的架构与小提琴中的不匹配。小提琴更有意义。

标签: php mysql sql hierarchy


【解决方案1】:

一个相当标准的方法是使用@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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多