Mysql-TREE实现
来源:互联网 发布:mysql派生表查询 编辑:程序博客网 时间:2024/06/17 03:00
Mysql 官方并没有实现树结构获取数据的方案,但是可以通过Mysql提供的函数 FIND_IN_SET(str,strlist) 递归实现;
FIND_IN_SET(str,strlist) 函数介绍
假如字符串str 在由N 子链组成的字符串列表strlist 中, 则返回值的范围在 1 到 N 之间 。一个字符串列表就是一个由一些被‘,’符号分开的自链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则 FIND_IN_SET() 函数被优化,使用比特计算。如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。 这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。
mysql> SELECT FIND_IN_SET(‘b’,’a,b,c,d’);
TREE实现
// 1 创建表CREATE TABLE IF NOT EXISTS t_tree_table ( `id` INT (32) AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR (64) COMMENT '名称', pId VARCHAR (32));
// 2 创建递归存储过程DROP FUNCTION IF EXISTS `getChildLst`;CREATE FUNCTION `getChildLst`(rootId INT) RETURNS varchar(1000)BEGIN DECLARE sTemp VARCHAR(1000); DECLARE sTempChd VARCHAR(1000); 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_tree_table where FIND_IN_SET(pId,sTempChd)>0; END WHILE; RETURN sTemp;END;
// 3 使用SELECT *FROM t_tree_tableWHERE FIND_IN_SET(id, getChildLst('1'));
// 4 查询结果
// 5 可能遇到问题
创建函数问题描述:
ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable)
问题分析:
这是我们开启了bin-log, 我们就必须指定我们的函数是否是
1 DETERMINISTIC 不确定的
2 NO SQL 没有SQl语句,当然也不会修改数据
3 READS SQL DATA 只是读取数据,当然也不会修改数据
4 MODIFIES SQL DATA 要修改数据
5 CONTAINS SQL 包含了SQL语句
其中在function里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。如果我们开启了 bin-log, 我们就必须为我们的function指定一个参数。
解决方案:
临时设置:
set global log_bin_trust_function_creators=TRUE;
my.ini 设置:
[mysqld]
加上log_bin_trust_function_creators=1
- Mysql-TREE实现
- Mysql B-Tree 索引
- mysql b-tree索引
- mysql b-tree索引
- B-tree与Mysql
- mysql——Tree
- 11级_Java_曹建波 04.07 jQuery easyUI tree +struts2+hibernate +mysql 实现 三级联动的案例
- jQuery easyUI tree +struts2+hibernate +mysql 实现 三级联动的案例
- MySQL中MyISAM和InnoDB对B-Tree索引不同的实现方式
- Tree的简单实现
- FLEX TREE实现
- flex 实现Tree
- AVL Tree 的实现
- B- Tree 的实现
- B+tree 实现
- B-tree(C++实现)
- Binary Search Tree 实现
- java实现tree功能
- codeforces 812C Sagheer and Nubian Market (二分)
- JavaScript 中 for 循环的独特之处
- jQuery growl插件
- JQuery初识
- BZOJ 1625: [Usaco2007 Dec]宝石手镯
- Mysql-TREE实现
- 112. Path Sum (二叉树)
- Linux下使用make工具与库
- 最长上升子序列(LIS)(DP练习)
- Discuz 7.2 faq.php漏洞分析
- lecene第四天总结篇
- String、StringBuffer、与StringBuilder的区别
- [bzoj1492][cdq分治][斜率优化][NOI2007]货币兑换Cash
- C++primer 阅读笔记---------------动态内存