当前位置: 首页 > 面试题库 >

MySQL选择递归获取所有子级

查飞星
2023-03-14
问题内容

我有一张桌子

 CREATE TABLE IF NOT EXISTS `Folder` (
    `idFolder` INT(11) NOT NULL AUTO_INCREMENT,
    `FolderName` VARCHAR(150) NOT NULL,
    `idFolderParent` INT(11) NULL,
    PRIMARY KEY (`idFolder`),
    CONSTRAINT `fk_1`
    FOREIGN KEY (`idFolderParent`)
    REFERENCES `Folder` (`idFolder`)
)

我填写这个表

idFolder , FolderName , idFolderParent
   1           ADoc           Null  
   2           ADoc1           1  
   3           ADoc2           2
   4           ADoc3           3
   5           ADoc4           4
   6           ADoc5           5
   7           ADoc6           4

选择idFolder = 1的文件夹时,应返回该文件夹和子子文件夹的所有子文件夹(2,3,4,5,6,7)

当我选择文件夹ID = 4 ==>(5,7,6)

当我选择文件夹ID = 3 ==>(4,5,6,7)

一个查询该怎么做?

谢谢


问题答案:

这是工作中的一个

SELECT GROUP_CONCAT(lv SEPARATOR ',') FROM (
SELECT @pv:=(SELECT GROUP_CONCAT(idFolder SEPARATOR ',') FROM Folder WHERE idFolderParent IN (@pv)) AS lv FROM Folder
JOIN
(SELECT @pv:=1)tmp
WHERE idFolderParent IN (@pv)) a;

在此处查看SQL固件:http://sqlfiddle.com/#!2 /
02b78 / 1



 类似资料:
  • 我把这张桌子填满了 当选择IDFolder=1的文件夹时,应该为返回此文件夹的所有子文件夹和子文件夹(2,3,4,5,6,7) 当我选择文件夹id=4==>(5,7,6)时

  • 问题内容: 我看到了这个答案,我希望他是不对的,就像有人不正确地告诉主键在一个列上,而我不能在多个列上设置它一样。 这是我的桌子 我想选择用户ID 2并递归,以便获得其所有直接子对象和间接子对象(即ID 4和5)。 如何以这种方式工作?我在postgresql和sqlserver中看到了递归。 问题答案: 看起来很麻烦,但是要使用它, (或您要在层次树中查找的任何密钥ID)。 前提是从您正在使用的

  • 问题内容: 如何递归选择所有子元素? 此类仅在定义的className和所有直接子级上抛出一个类。您如何以一种简单的方式选择所有子节点,如下所示: 问题答案: 使用 空格 匹配元素的所有后代: 匹配 x 内的每个元素 y ,无论它嵌套在多深处-孩子,孙子等等。 __ 星号匹配任何元素。 官方规范:CSS2.1:第5.5章:后代选择器

  • 问题内容: 我有一张桌子,桌子之间有一对多的关系。每个记录可以有来自同一张表的n个孩子。例如 给定一个ID,我想递归选择所有文件夹记录的SUM(SIZE)。目标数据库是MySql 5,但是如果它的通用性足以在Oracle和MS- SQL中运行,那将是很好的选择。 我不知道树有多深,可能是1级,可能是50级(或更多) 问题答案: 这可能会有些帮助:http : //mikehillyer.com/a

  • 问题内容: 这是我想要做的事情:-我需要一个函数,当将其作为参数传递时,ID(用于事物类别)将提供所有子类别,子子类别和子子子..etc 。-我在考虑使用递归函数,因为我不知道子类别及其子类别的数量,依此类推,这是到目前为止我一直在尝试的操作 如果我使用return而不是echo,我将不会得到相同的结果。我需要一些帮助以解决此问题或从头开始重写它 问题答案: 我很难弄清楚你的职能。我认为这会做您想

  • 问题内容: Python代码: h.xml代码: 代码输出 此处未选择是另一个孩子。那么,如何指示findall递归地遍历DOM树并收集所有三个元素? 问题答案: 报价, 仅查找带有标签的元素,这些标签是当前元素的直接子元素。 由于它只能找到直系孩子,因此我们需要递归地找到其他孩子,像这样 更好的是,使其成为生成器函数