无限极分类查询mysql_SQL无限极分类查询与上级ID查询命令

本文介绍了如何在MySQL中使用CONCAT和CONCAT_WS函数进行无限极分类查询及上级ID查询。通过示例展示了如何创建权限表并利用pri_path字段实现树形结构,以及如何查询指定ID的子权限。
摘要由CSDN通过智能技术生成

首先看一下mysql的这个函数CONCAT(str1,str2,…)

返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。或许有一个或多个参数。 如果所有参数均为非二进制字符串,则结果为非二进制字符串。 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。一个数字参数被转化为与之相等的二进制字符串格式;若要避免这种情况,可使用显式类型 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col)

mysql> SELECT CONCAT(‘My’, ‘S’, ‘QL’);

-> ‘MySQL’

mysql> SELECT CONCAT(‘My’, NULL, ‘QL’);

-> NULL

mysql> SELECT CONCAT(14.3);

-> ‘14.3’

补充说明下:CONCAT_WS

CONCAT_WS(separator,str1,str2,…)

CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。 第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。

mysql> SELECT CONCAT_WS(‘,’,’First name’,’Second name’,’Last Name’);

-> ‘First name,Second name,Last Name’

mysql> SELECT CONCAT_WS(‘,’,’First name’,NULL,’Last Name’);

-> ‘First name,Last Name’

CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。

例子:

首先看一下数据库表:

20150618161317957.jpg

数据库sql:

CREATE TABLE `sh_privilege` (

`id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',

`pri_name` varchar(15) NOT NULL COMMENT '权限名称',

`module_name` varchar(15) NOT NULL COMMENT '对应的模块名称',

`controller_name` varchar(15) NOT NULL COMMENT '对应的控制器名称',

`action_name` varchar(15) NOT NULL COMMENT '对应的方法名称',

`parent_id` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '上级的id',

`pri_level` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '是第几级的0:顶级1:二级2:三级,用途:缩近',

`pri_path` varchar(15) NOT NULL DEFAULT '0' COMMENT '上级的路径的ID,如:0-2-6,用途:无须递归就可以实现树形结构',

PRIMARY KEY (`id`),

KEY `pri_path` (`pri_path`)

) ENGINE=MyISAM AUTO_INCREMENT=18 DEFAULT CHARSET=utf8 COMMENT='权限表';

SQL实现无线分类的方法 :SELECT id,pri_path FROM sh_privilege ORDER BY CONCAT(pri_path,‘-‘,id);

20150618161320947.jpg

取 8 的子权限:SELECT id,pri_path FROM sh_privilege WHERE CONCAT(‘-‘,pri_path,‘-‘)LIKE ‘%-8-%’;

20150618161322790.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值