【第22期】观点:IT 行业加班,到底有没有价值?

【ztree系列】MySQL查询所有子节点

原创 2016年08月30日 22:23:56

      在树形结构中,常常需要根据某一节点来查询其下所有子节点,网上有好几种解决方式,我采用了函数递归,如下:

CREATE FUNCTION `getChildLst`(rootId INT)
RETURNS varchar(400000)
BEGIN

DECLARE sTemp VARCHAR(400000);

DECLARE sTempChd VARCHAR(400000);

SET sTemp = '$';

SET sTempChd = cast(rootId as char);

WHILE sTempChd is not NULL DO

SET sTemp = concat(sTemp,',',sTempChd);

SELECT group_concat(id) INTO sTempChd FROM t_test where find_in_set(pid,sTempChd)>0 ;

END WHILE;

return sTemp; 

END
其中用到了四个mysql函数

      1)cast():用来获取一个类型的值,并产生另一个类型的值。但是可转换类型有限。还有一个用来做转换的函数是convert(value, type)

            语法:cast(valueastype);

      2)concat():用于将多个字符串连接成一个字符串,返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。

            语法:concat (str1,str2,…)

      3)group_concat():将相同的行组合起来,默认逗号分隔

            语法:group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])

      4)find_in_set():查询某个字段的值存在于某一集合中的所有符合条件的结果

            语法:find_in_set(str,strLIst)

            如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为null,则返回值为 null。

            like是广泛的模糊匹配,字符串中没有分隔符,find_in_set 是精确匹配,字段值以英文”,”分隔,find_in_set查询的结果要小于like查询的结果。

      在数据量小的时候没问题,等数据量稍微大一点,长度限制问题就来了。首先遇到的是group_concat() 返回结果的长度问题,它默认为1024,可以使用如下语句来查看

<span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;">      </span>show variables like "group_concat_max_len";


      当超过1024个字符长度时,会自动截取前1024个字符省略后边的,并且如果截取得当一般不会报错。所以在使用这个函数之前,就要考虑到它的特性,避免因为数据增长产生问题。

      对于group_concat() 长度的调整,可到mysql的配置文件 my.ini 中加上。如果使用的是my-defalut.init ,可复制一份更名为 my.init 再做修改,原配置文件不动。


      我设置的102400,这个数值可根据具体需求来定。

      总之使用这种查询子节点的方法,存在很多长度的瓶颈,如果树的结构变动不太大,倒是可以采用。


      参考:http://www.cnblogs.com/fromchaos/archive/2010/12/15/1907031.html

     http://dev.mysql.com/doc/refman/5.7/en/string-functions.html

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

【ztree系列】节点的增删改

一直以来,项目中用到的树形结构,都是用来读取显示数据、或者控制页面上其它内容的展示。对于树数据源的修改,一般由其它模块来完成,这样可以让功能单一化,不必让树的职责过多,但是却不得不再多加一步了。为了给...

【zTree系列】树形结构zTree

树形结构有多种形式和实现方式,zTree可以说得上是一种比较简洁又美观的且实现起来也相对简单。zTree是一个依靠jQuery实现的多功能“树插件”。它最大的优点是配置灵活,只要id与pid的值相同就...

【ztree系列——图标的修改】Bootstrap风格的ztree

前段时间项目中需要用树形结构,在选取的时候参考了很多插件,经过很多尝试,最后又回归到了ztree上。我以前用的界面框架是EasyUI,但是它的树结构在实现起来有点复杂,并且功能不是特别完善。dtree...

MySQL中根据父节点查询其所有子节点

原文地址:http://jingyan.baidu.com/article/647f01158ee0da7f2148a80b.html DROP FUNCTION IF EXIS...

php获取某节点下的所有子节点,mysql递归

php获取某节点下的所有子节点,mysql递归

zTree 的异步加载加载实现--jfinal

jfinal中应用zTree的异步加载数据,大数据量的情况下很好用

zTree理解和简单Demo

zTree是利用 JQuery 的核心代码,实现一套能完成大部分常用功能的 Tree 插件。整个zTree的页面显示核心 代码是。 $(document).ready(function () ...

SpringMVC中使用zTree

SpringMVC中使用zTree

ztree数据库交互

本来自己动手写了一个treeview的,但是界面太挫了,最后还是觉得下一个好了,下了一ztree,发现功能很强大。但是它的数据都是放在一个Data的js文件中。 后来看了ztree的API发现了一些...
  • zi_jun
  • zi_jun
  • 2012-11-13 13:51
  • 2299

easyui+ztree 后台管理系统模板

用easyui+ztree做了个后台管理系统模板,效果图:   下载地址:http://download.csdn.net/detail/jackpay/6744505
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)