实现mysql树查询的性能
发布时间:2022-02-23 15:15:46 所属栏目:MySql教程 来源:互联网
导读:这篇文章给大家分享的是有关实现mysql树查询的功能的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。 需求:查找当前(任意)级别下的所有子节点。 通过自定义mysql函数实现,先贴代码,后面给出详细说明: delimiter $$ CREATE FUN
这篇文章给大家分享的是有关实现mysql树查询的功能的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。 需求:查找当前(任意)级别下的所有子节点。 通过自定义mysql函数实现,先贴代码,后面给出详细说明: delimiter $$ CREATE FUNCTION `getChildList`(rootId INT) RETURNS varchar(1024) BEGIN DECLARE childListStr VARCHAR(1024); DECLARE tempChildStr VARCHAR(1024); DECLARE rootIdStr VARCHAR(64); SET childListStr=NULL; SET rootIdStr=cast(rootId as CHAR); myloop: WHILE TRUE DO SELECT GROUP_CONCAT(id) INTO tempChildStr FROM test where FIND_IN_SET(parrent_id,rootIdStr)>0; IF tempChildStr IS NOT NULL THEN SET rootIdStr=tempChildStr; IF childListStr IS NULL THEN SET childListStr=tempChildStr; ELSE SET childListStr=concat(childListStr,',',tempChildStr); END IF; ELSE LEAVE myloop; END IF; END WHILE; RETURN childListStr; END $$ 建表sql: CREATE TABLE `test` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `parrent_id` int(11) DEFAULT '0', `name` varchar(32) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8; +------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+------------------+------+-----+---------+----------------+ | id | int(11) unsigned | NO | PRI | NULL | auto_increment | | parrent_id | int(11) | YES | | 0 | | | name | varchar(32) | YES | | NULL | | +------------+------------------+------+-----+---------+----------------+ 2-4行:mysql函数语法规范,不多解释 5-9行:定义逻辑所需变量。 childListStr:最终返回的子节点ids_str(例如:"1,2,3,4,5")。 tempChildStr: 临时子节点ids_str(例如:"1")。 rootIdStr: 输入根节点转换为char类型。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐