liuxiaoji

mysql8.0

准备表结构

CREATE TABLE `function`  (
  `Id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT \'Id\',
  `CreateTime` datetime(0) NOT NULL COMMENT \'创建时间\',
  `ModifyTime` timestamp(0) NOT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT \'修改时间\',
  `Name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT \'名称\',
  `ParentId` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT \'上级功能Id\',
  `Icon` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT \'图标\',
  `Type` int(11) NOT NULL COMMENT \'功能类型\',
  `Sort` int(11) NOT NULL COMMENT \'类型\',
  `Path` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT \'路径\',
  `Describe` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT \'描述\',
  `Flag` bigint(20) NOT NULL COMMENT \'标记\',
  `Classify` int(10) NOT NULL COMMENT \'所属系统分类\',
  PRIMARY KEY (`Id`) USING BTREE,
  UNIQUE INDEX `Index_Function_PathClassify`(`Path`, `Classify`) USING BTREE COMMENT \'每个系统路径是唯一的\'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

准备数据

INSERT INTO `function` VALUES (\'1\', \'2019-07-08 16:03:29\', \'2019-07-08 16:03:31\', \'人力\', \'0\', \'/\', 1, 1, \'/a\', \'1\', 0, 0);
INSERT INTO `function` VALUES (\'10\', \'2019-07-08 16:22:54\', \'2019-07-08 16:22:55\', \'企业资源\', \'3\', \'/qi\', 1, 1, \'/qi\', NULL, 0, 0);
INSERT INTO `function` VALUES (\'2\', \'2019-07-08 16:06:55\', \'2019-07-08 16:06:57\', \'员工\', \'1\', \'/\', 1, 1, \'/c\', \'1\', 0, 0);
INSERT INTO `function` VALUES (\'3\', \'2019-07-08 16:07:48\', \'2019-07-08 16:07:50\', \'组织\', \'1\', \'/\', 1, 1, \'/d\', \'1\', 0, 0);
INSERT INTO `function` VALUES (\'4\', \'2019-07-08 16:08:28\', \'2019-07-08 16:08:31\', \'考勤\', \'1\', \'\', 1, 1, \'/dsa\', \'1\', 0, 0);
INSERT INTO `function` VALUES (\'5\', \'2019-07-08 16:08:53\', \'2019-07-08 16:09:27\', \'设备\', \'4\', \'/ss\', 1, 1, \'/3\', \'1\', 0, 0);
INSERT INTO `function` VALUES (\'6\', \'2019-07-08 16:18:04\', \'2019-07-08 16:18:06\', \'打野\', NULL, \'/da\', 1, 12, \'/daa\', NULL, 0, 1);
INSERT INTO `function` VALUES (\'7\', \'2019-07-08 16:19:52\', \'2019-07-08 16:19:55\', \'员工成员\', \'2\', \'/a\', 1, 14, \'/aa\', \'1\', 0, 0);
INSERT INTO `function` VALUES (\'8\', \'2019-07-08 16:21:29\', \'2019-07-08 16:21:32\', \'员工家庭\', \'2\', \'/j\', 1, 2, \'/jt\', \'\', 0, 0);
INSERT INTO `function` VALUES (\'9\', \'2019-07-08 16:22:18\', \'2019-07-08 16:22:20\', \'员工微信部落\', \'2\', \'/wx\', 1, 1, \'/wx\', NULL, 0, 0);

全表数据展示

根据父级Id递归查询所有子节点(查询父级Id为0 并且分类为0的所有子节点)

WITH RECURSIVE _children AS
(
 SELECT fun.* FROM `function` fun WHERE fun.ParentId=\'0\' AND Classify = 0
    UNION ALL
 SELECT fun.* FROM _children,`function` fun WHERE fun.ParentId=_children.Id
)
SELECT * FROM _children;

根据子节点查询所有父亲节点(查询子节点Id为9的所有父节点)

WITH RECURSIVE _parent AS
(
 SELECT fun.* FROM `function` fun WHEREfun.Id=\'9\' 
    UNION ALL
 SELECT fun.* FROM _parent,`function` fun WHERE fun.Id=_parent.ParentId
)
SELECT * FROM _parent;

 mysql5.0参考: https://www.cnblogs.com/xiaoxi/p/5942805.html

sqlserver 在mysql8.0基础上去掉RECURSIVE关键字即可

WITH _children AS
(
 SELECT fun.* FROM `function` fun WHERE fun.ParentId=\'0\' AND Classify = 0
    UNION ALL
 SELECT fun.* FROM _children,`function` fun WHERE fun.ParentId=_children.Id
)
SELECT * FROM _children;

WITH _parent AS
(
 SELECT fun.* FROM `function` fun WHERE fun.Id=\'9\' 
    UNION ALL
 SELECT fun.* FROM _parent,`function` fun WHERE fun.Id=_parent.ParentId
)
SELECT * FROM _parent;

 mysql5.7

select  id,
        name,
        parent_id 
from    (select * from products
         order by parent_id, id) products_sorted,
        (select @pv := \'19\') initialisation
where   find_in_set(parent_id, @pv)
and     length(@pv := concat(@pv, \',\', id))

 

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-09
  • 2021-07-24
猜你喜欢
  • 2021-12-26
  • 2021-11-13
相关资源
相似解决方案