MySQL数据中分级分组显示数据
前面已经有了SqlServer数据分级分组显示数据了。今天又来做一个MySQL数据库中的分级分组显示,SqlServer中用到了递归,这里为了简单就直接把根的数据显示为0 ,而不用递归了。
在MySQL数据库中创建数据表:
CREATE TABLE `categories` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '分类id' ,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '分类名称' ,
`parent` int(11) NOT NULL COMMENT '分类的父id' ,
`path` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '分类的继承路径' ,
`is_leaf` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否叶节点' ,
PRIMARY KEY (`id`),
INDEX `parent` (`parent`) USING BTREE ,
INDEX `path` (`path`) USING BTREE ,
INDEX `path,is_leaf` (`path`, `is_leaf`) USING BTREE
)
ENGINE=InnoDB
表已经建好了,现在来插入测试数据:
insert into categories(`name`,parent,path,is_leaf) values('根',0,'',0);
insert into categories(`name`,parent,path,is_leaf) values('分类1',1,'1,2',0);
insert into categories(`name`,parent,path,is_leaf) values('分类2',1,'1,3',0);
insert into categories(`name`,parent,path,is_leaf) values('分类1-分类1',2,'1,2,4',1);
insert into categories(`name`,parent,path,is_leaf) values('分类2-分类1',2,'1,3,5',1);
insert into categories(`name`,parent,path,is_leaf) values('分类2-分类2',2,'1,3,6',1);
insert into categories(`name`,parent,path,is_leaf) values('分类1-分类2',2,'1,2,7',1);
insert into categories(`name`,parent,path,is_leaf) values('分类1-分类1-分类1',3,'1,2,4,8',1);
insert into categories(`name`,parent,path,is_leaf) values('分类2-分类1-分类2',3,'1,3,5,9',1);
insert into categories(`name`,parent,path,is_leaf) values('分类2-分类2-分类1',3,'1,3,6,10',1);
insert into categories(`name`,parent,path,is_leaf) values('分类1-分类2-分类2',3,'1,2,7,11',1);
insert into categories(`name`,parent,path,is_leaf) values('分类1-分类1-分类2',3,'1,2,4,12',1);
insert into categories(`name`,parent,path,is_leaf) values('分类2-分类1-分类1',3,'1,3,5,13',1);
insert into categories(`name`,parent,path,is_leaf) values('分类2-分类2-分类2',3,'1,3,6,14',1);
insert into categories(`name`,parent,path,is_leaf) values('分类1-分类2-分类1',3,'1,2,7,15',1);
查询得到的结果是:
select * from categories ;

接下来开始我们的分级分组显示数据了SQL语句
select id, case parent when 0 then `name` else '' end as '第一级栏目',
case parent when 1 then `name` else '' end as '第二级栏目',
case parent when 2 then `name` else '' end as '第三级栏目',
case parent when 3 then `name` else '' end as '第四级栏目'
from categories GROUP BY path
结果是如下图:

这就是我们想要的结果。
其实他们说这个表结构可以实现无限分类的。我们可以这样查询。
SELECT * FROM categories WHERE path LIKE '%5%'
select * from categories where path like '1,3,5,%'

好了,更多用途慢慢去发现吧。
MySQL数据中分级分组显示数据的更多相关文章
- 利用PHP实现登录与注册功能以及使用PHP读取mysql数据库——以表格形式显示数据
登录界面 <body><form action="login1.php" method="post"><div>用户名:&l ...
- 如何把mysql的列修改成行显示数据简单实现
如何把mysql的列修改成行显示数据简单实现 创建测试表: 1: DROP TABLE IF EXISTS `test`; 2: CREATE TABLE `test` ( 3: `year` int ...
- [MSSQL]找出一天数据中从第一条数据开始每累加1小时的数据
用Sql Server找出一天数据中从第一条数据开始每累加1小时的数据 -- ============================================= -- Author: Alle ...
- Delphi7连接MySql数据库-DBGrid控件显示数据
一个简单的Delphi7小程序,使用MySql数据库做简单查询,用DBGrid控件显示结果,实现过程如下: (1)在MySql中新建demouser表,插入记录用于测试. (2)在Delphi7中新建 ...
- 小程序开发笔记(八)—Js数组按日期分组显示数据
数据分组展示有两种方式,一种是后端直接传入分组格式的Json数据,另一种是我们在前端自己转换格式,这里我们在前端处理转换按日期分组的数据格式 1.例如后端返回数据格式为: [{createtime:' ...
- 【MySQL】测试MySQL表中安全删除重复数据只保留一条的相关方法
第二篇文章测试说明 开发测试中,难免会存在一些重复行数据,因此常常会造成一些测试异常. 下面简单测试mysql表删除重复数据行的相关操作. 主要通过一下三个大标题来测试说明: 02.尝试删除dept_ ...
- Java程序向MySql数据库中插入的中文数据变成了问号
找到mysql的安装目录,修改my.ini文件 (1)如何找到my.ini文件 如果my.ini文件不在MySQL的安装目录下,可能放在隐藏目录,要先去找到ProgramData,(这里要先打开显示隐 ...
- Jmeter察看结果树的响应数据中的中文显示乱码问题处理
1.Jmeter的察看结果树的响应数据有中文时会显示乱码,如图,我访问百度HTTP请求,响应数据中的title处是一串乱码 2.我们需要改一个设置,打开jmeter\bin\jmeter.proper ...
- 页面中 json 格式显示 数据
在页面中,有时候我们需要的不仅仅是将数据显示出来,而且要以以 json 的格式显示数据,如显示接口的时候 我们需要如下显示 这个时候,主要用到了 <pre> 标签 $.get(" ...
随机推荐
- CodeForces - 528D Fuzzy Search (FFT求子串匹配)
题意:求母串中可以匹配模式串的子串的个数,但是每一位i的字符可以左右偏移k个位置. 分析:类似于 UVALive -4671. 用FFT求出每个字符成功匹配的个数.因为字符可以偏移k个单位,先用尺取法 ...
- Core ML 入门
1.下载Xcode 9 2.下载模型,https://developer.apple.com/machine-learning/ 3.开动.. 4.待续 模拟器66的
- HTML DOM setInterval() 方法
定义和用法 setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式. setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被 ...
- CSS Display(显示)和Visibility(可见性)
CSS Display(显示)和Visibility(可见性) 一.简介 display属性设置一个元素应如何显示(隐藏不占用空间),visibility属性指定一个元素应可见还是隐藏(隐藏占用空间) ...
- SpringMVC HttpMessageConverter 匹配规则
以下内容,如有问题,烦请指出,谢谢! SpringMVC启动时会自动配置一些HttpMessageConverter,接收到http请求时,从这些Converters中选择一个符合条件的来进行Http ...
- [BZOJ4016]最短路径树问题
Description 给一个包含n个点,m条边的无向连通图.从顶点1出发,往其余所有点分别走一次并返回. 往某一个点走时,选择总长度最短的路径走.若有多条长度最短的路径,则选择经过的顶点序列字典序最 ...
- CentOS 7 Nginx安装配置
1.添加Nginx源 yum install epel-release 2.安装Nginx yum install nginx 3.启动Nginx systemctl start nginx //配置 ...
- SpringBoot项目结构介绍
一项目结构介绍 springboot框架本身对项目结构并没有特别的要求,但是按照最佳的项目结构可以帮助我们减少可能遇到的错误问题.结构如下: (1)应用主类SpringbootApplication应 ...
- hadoop安装时报错 /usr/local/hadoop-2.6.0-stable/hadoop-2.6.0-src/hadoop-hdfs-project/hadoop-hdfs/target/findbugsXml.xml does not exist
安装时报错:Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.7:run (site) on project ...
- centos vsftp 500 OOPS: cannot change directory:/home/ftp
系统是CentOS,是RH派系的.我把vsftpd安装配置好了,以为大功告成,但客户端访问提示如下错误:500 OOPS: cannot change directory:/home/ftp原因是他的 ...