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

首先看一下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)。

 

例子:

首先看一下数据库表:

数据库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);

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

时间: 2024-11-02 01:48:33

SQL无限极分类查询与上级ID查询命令的相关文章

asp.net sql无限极分类实例程序

数据库结构  代码如下 复制代码 create table category (     id                  int,                    clsno            nvarchar(50),            clsname       nvarchar(50),                     clslist            nvarchar(250),              clsparentno  nvarchar(50

查询-mysql无限极分类排序问题

问题描述 mysql无限极分类排序问题 表是这样设计的 2,4,5字段请无视 现在要查询出来这样格式的数据 一级分类 二级分类A 三级分类A 三级分类B 二级分类B 三级分类A 三级分类B 我使用的sql为 select * from vn_erp_healthprice order by sorts sorts字段为varchar类型 查询的结果如下 排序结果满足业务要求,但为什么1-11排在1-2前面 还有 根据字符串排序这是个什么原理来着 好久没用过这种分类了 一时想不起来了 求大神赐教

sqlserver实现树形结构递归查询(无限极分类)

SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式 百度百科 公用表表达式(CTE),是一个在查询中定义的临时命名结果集将在from子句中使用它.每个CTE仅被定义一次(但在其作用域内可以被引用任意次),并且在该查询生存期间将一直生存.可以使用CTE来执行递归操作.创建的语法是: with <name of you cte>(<column names>) as( <actual query> ) select * from

sqlserver实现树形结构递归查询(无限极分类)的方法

SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式 百度百科 公用表表达式(CTE),是一个在查询中定义的临时命名结果集将在from子句中使用它.每个CTE仅被定义一次(但在其作用域内可以被引用任意次),并且在该查询生存期间将一直生存.可以使用CTE来执行递归操作.创建的语法是: with <name of you cte>(<column names>) as( <actual query> ) select * from

创建无限极分类树型结构的简单方法

先上效果图 顶级分类其实就是一级分类,二级分类也叫作一级分类的子分类,在这个基础上,子分类还可以拥有子分类,这样就构成了无限极分类. 接下来看具体实现的代码: 一.在控制器中按字段查询,查询出所有分类信息(id:该分类的ID值,cate_name:该分类的名称,pid:父ID,sorts:为显示标题顺序排序做准备,可不写.) public function cate_display() { $cate = D('Cate'); $field = array('id','cate_name','p

PHP实现无限极分类

利用两个for循环实现无限级分类 表: 字段名 字段类型 备注 默认值 id int 主键 auto-increment   name varchar 分类名称   pid int 父类id 0 顶级分类的 pid 默认就是0了.当我们想取出某个分类的子分类树的时候,基本思路就是递归,当然,出于效率问题不建议每次递归都查询数据库,通常的做法是先将所有分类取出来,数据保存到PHP数组里,再进行处理,最后还可以将结果缓存起来以提高下次请求的效率. 先来构建一个原始数组,这个直接从数据库中查询出来就行

实现php无限极分类的方法

今天写了下无限极分类 下面就把代码贴上来了 写的不怎么样. method of classify one <?php /* reader: 这是自己写的无限极分类实现方法 里面的编辑方法只是对分类名进行了编辑 没有进行移动操作 小弟能力有限忘大家多多包涵啊 第一种方法: CREATE TABLE `types` ( `type_id` int(11) NOT NULL AUTO_INCREMENT, `type_name` varchar(20) NOT NULL, `type_p_id` va

PHP实现无限极分类图文教程_php实例

一般来说实现无限极分类都是使用递归或者迭代的方式,小伙伴们看下本文的实现方式吧. 1,数据库设计: 2,代码: 复制代码 代码如下: /**  * @author koma  * @todo   PHP无限极分类  */ $cn = mysql_connect('localhost', 'root', '') or die(mysql_error()); mysql_select_db('t', $cn) or die(mysql_error()); mysql_query('set names

php实现smarty模板无限极分类的方法_php实例

本文实例讲述了php实现smarty模板无限极分类的方法.分享给大家供大家参考,具体如下: <?php $conn = mysql_connect("localhost","admin","admin"); mysql_select_db("people_shop",$conn); mysql_query("SET NAMES 'UTF-8'"); $class_arr=array(); $sql =