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(" ...
随机推荐
- 有界、无界队列对ThreadPoolExcutor执行的影响
本文转载自https://blog.csdn.net/kusedexingfu/article/details/72491864 Java提供了4钟线程池: newCachedThreadPool n ...
- eclipse中添加tomcat ServerName 无法输入
Eclipse的开发过程中,无法从以下方式,添加Tomcat服务器. 其中ServerName是被置为灰色的,无法编辑. 如何解决 1. 关闭Eclipse 2. 打开WorkSpace所在的 ...
- nginx添加新模块
1.下载模块 git clone https://github.com/agentzh/echo-nginx-module 2.放入指定位置 mv echo-nginx-module-master / ...
- 使用selenium前学习HTML(3)——元素
<!-- HTML 元素指的是从开始标签(start tag)到结束标签(end tag)的所有代码. 注释:开始标签常被称为开放标签(opening tag),结束标签常称为闭合标签(clos ...
- awk循环语句-【AWK学习之旅】
AWK中两种循环语句:if-else 和 while 控制流语句: 1.if-else 求总数,平均值: [root@monitor awkdir]# awk '$3>6 {n = n ...
- 20145216 史婧瑶《Java程序设计》第6周学习总结
20145216 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入/输出 10.1 InputStream与OutputStream 如果要将数据从来源中取出,可以使用输 ...
- 20145328 《Java程序设计》第9周学习总结
20145328 <Java程序设计>第9周学习总结 教材学习内容总结 第十六章 整合数据库 16.1JDBC 16.1.1JDBC简介 JDBC(Java DataBase Connec ...
- SVN添加忽略目录
项目:Thinkphp 目录结构: Thinkphp |-- Common |-- Runtime |-- Home 忽略目标: Runtime 文件夹及下面所有文件 首先,需要忽略的目录必须没有加入 ...
- svn根据项目来创建目录结构或者根据分支来创建项目结构
假设检出项目的时候,都使用trunk来进行检出 按照项目来创建目录结构 TestPrj版本库 适合一次只检出一个项目的需求 这个版本库的名字无所谓,随便起就好了.因为检出某一个项目的trunk的时候, ...
- LeetCode——Nth Digit
Question Find the nth digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... ...