具体数据库根据情况修改
树形结构的数据很多地方都用得到,(产品)父子分类、(角色)父子权限、(应用、模块)父子组
MySQL
CREATE TABLE filler ( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT ) ENGINE=Memory; CREATE TABLE hierarchy ( id int(10) unsigned NOT NULL AUTO_INCREMENT, parent int(10) unsigned NOT NULL, PRIMARY KEY (id), KEY ix_hierarchy_parent (parent, id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; DELIMITER $$ CREATE PROCEDURE prc_filler(cnt INT) BEGIN DECLARE _cnt INT; SET _cnt = 1; WHILE _cnt <= cnt DO INSERT INTO filler SELECT _cnt; SET _cnt = _cnt + 1; END WHILE; END $$; DELIMITER $$ CREATE FUNCTION hierarchy_connect_by_parent_eq_prior_id(value INT) RETURNS INT NOT DETERMINISTIC READS SQL DATA BEGIN DECLARE _id INT; DECLARE _parent INT; DECLARE _next INT; DECLARE CONTINUE HANDLER FOR NOT FOUND SET @id = NULL; SET _parent = @id; SET _id = -1; IF @id IS NULL THEN RETURN NULL; END IF; LOOP SELECT MIN(id) INTO @id FROM hierarchy WHERE parent = _parent AND id > _id; IF @id IS NOT NULL OR _parent = @start_with THEN SET @level = @level + 1; RETURN @id; END IF; SET @level := @level - 1; SELECT id, parent INTO _id, _parent FROM hierarchy WHERE id = _parent; END LOOP; END $$; START TRANSACTION; CALL prc_filler(18); COMMIT; INSERT INTO hierarchy (id, parent) SELECT id, id DIV 3 FROM filler;
SELECT CONCAT(REPEAT(' ', level - 1), CAST(_id AS CHAR)) AS treeitem, parent, `level` FROM ( SELECT @r AS _id, ( SELECT @r := parent FROM hierarchy WHERE id = _id ) AS parent, @l := @l + 1 AS `level` FROM ( SELECT @r := 10, @l := 0 ) vars, hierarchy h WHERE @r <> 0 ) q;
原文(英文)地址:http://explainextended.com/2009/07/22/hierarchial-queries-in-mysql-identifying-trees/
PostgreSQL
片段一
-- Function: pdm.get_product_category_parent_path(numeric, boolean) -- DROP FUNCTION pdm.get_product_category_parent_path(numeric, boolean); CREATE OR REPLACE FUNCTION pdm.get_product_category_parent_path(IN category_id numeric, IN _self boolean, OUT parent_ids numeric[]) RETURNS numeric[] AS $BODY$ DECLARE _parent_id numeric default category_id; _sql record; _p integer default 0; BEGIN select parent_category_id,name from pdm.product_category where product_category_id=_parent_id into _sql; if found then --是否添加自己 if _self then parent_ids := array_prepend(_parent_id,parent_ids); end if; _parent_id := _sql.parent_category_id; _p := 0; loop _p := _p+1; select product_category_id,parent_category_id from pdm.product_category where product_category_id=_parent_id into _sql; exit when not found or _p >= 20;--循环大于20次就强制退出,防止死循环。; _parent_id := _sql.parent_category_id; parent_ids := array_prepend(_sql.product_category_id,parent_ids); end loop; end if; END; $BODY$ LANGUAGE plpgsql VOLATILE; ALTER FUNCTION pdm.get_product_category_parent_path(numeric, boolean) OWNER TO postgre;
片段二
-- Function: pdm.get_product_category_parent_path(numeric) -- DROP FUNCTION pdm.get_product_category_parent_path(numeric); CREATE OR REPLACE FUNCTION pdm.get_product_category_parent_path(IN category_id numeric, OUT parent_ids numeric[], OUT names character varying[]) RETURNS record AS $BODY$ DECLARE _parent_id numeric default category_id; _sql record; _p integer default 0; BEGIN select parent_category_id from pdm.product_category where product_category_id=_parent_id into _sql; if found then _parent_id := _sql.parent_category_id; _p := 0; loop _p := _p+1; select product_category_id,parent_category_id ,name from pdm.product_category where product_category_id=_parent_id into _sql; exit when not found or _p >= 20;--循环大于20次就强制退出,防止死循环。;可指定 IN loopnum bigint _parent_id := _sql.parent_category_id; parent_ids := array_prepend(_sql.product_category_id,parent_ids); names := array_prepend(_sql.name,names); end loop; end if; END; $BODY$ LANGUAGE plpgsql VOLATILE; ALTER FUNCTION pdm.get_product_category_parent_path(numeric) OWNER TO postgre;
相关推荐
php获取子级,父级,无限极分类,带demo,效率超高。下载请评价,谢谢!!!买到就是赚到,一直在用
3. **父级与子级**: 在无限级分类中,每个节点(分类)都有一个父节点(除了根节点,其父节点为null或不存在),同时可能有零个或多个子节点。通过递归,我们可以获取到任何节点的所有父级路径,也可以获取到某个...
在数据库中,通过递归查询数据库的所有子级,经典示例
WPF TreeView 全选/反选/子级选中父级也选中
fastadmin 表单中引用百度地图拾取坐标(子级先父级传值)
php数组之间的子级父级转换
当需要查询这些层次结构中的子级或父级时,SQL语言提供了强大的功能来处理这类问题。本主题聚焦于如何在SQL Server中进行递归查询,以获取表中的上下级节点关系。 首先,我们要明确一个关键概念——递归查询。递归...
在EasyUI的树控件中,"联动关系"通常指的是当用户选中或取消选中某个节点时,其子节点或父节点会根据预设的行为自动进行相应的选中或取消选中。这种行为可以通过配置树的属性来实现。例如,你可能希望在选择一个父...
本文将详细介绍如何通过MySQL的自定义函数来查询父级ID和子级ID。 首先,我们需要创建一个示例表格`table_name`,该表包含三个字段:`id`(主键)、`status`(状态)和`pid`(父级ID)。表的结构如下: ```sql ...
使用图层列表组织共享样式,创建层次结构,子级从父级继承属性。 安装 需要素描> = 53 最新版本的插件 解压缩 双击sketch-styles-hierarchy.sketchplugin 用法 您运行setup命令将创建两个新页面: Text Styles和...
此扩展添加了Sequel::Dataset#combine方法,该方法从由子级,父级或任何存在任何关系的对象组成的数据库中返回对象。 现在可以在一个查询中! 安装 将此行添加到您的应用程序的Gemfile中: gem 'sequel-combine' ...
当我们谈论"jQuery 子级元素在父级元素内滚动"时,这通常涉及到滚动事件和相对定位的概念。这个场景常见于创建滚动效果或者实现自定义滚动条,比如在滚动父元素时,子元素随着父元素的滚动保持可见或执行特定的动画...
主要介绍了微信小程序 子级页面返回父级并把子级参数带回父级实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
6. **自定义事件**:根据需求监听 treegrid 的各种事件,如点击行、展开折叠等,以实现特定的功能。 通过理解和掌握以上知识点,你将能够熟练地在项目中运用 layui treegrid 分页功能,为用户提供高效、直观的数据...
- 对于有`privilegeId`(子权限节点)的条目,则创建一个子级CheckBox,同样命名为`parent[${i}]`。这种命名方式使得同一父节点下的所有子项都能被统一管理。 4. **事件处理函数**: - `checkAll(name)`: 当选中...
HeroesApp 该项目是使用版本11.0.2生成的。 开发服务器 为开发服务器运行ng serve 。... 如果您更改任何源文件,该应用程序将自动重新加载。 代码脚手架 运行ng generate component component-name生成一个新的组件。...
全国省市区 编码 父级 子级
选中父级时,所有子全选中。子级取消选择时,当同级没有一个选中时,则其父级也取消选中,如果还有一个子级被选中,则不影响父级的选中状态