数据库多级分类相关行排列在一起的查询

木来 木来

我用的数据库是mysql。

在做后台分类管理的时候遇到这样一个需求

图片.png

就是将分类以树形菜单的方式展现出来。

我的导航栏的表在数据库中是这样的

图片.png

然后,经过初步的sql查询,实现的效果是下面这样的,下边有sql语句

select table1.n_id ,table1.n_name ,
table2.n_id as 'father_id',table2.n_name as 'father_name'

from nav as table1 left join nav as table2
on table1.n_pre=table2.n_id

查询效果:

图片.png

但是我想要的效果是与分类相关的行放在一起。

图片.png

简单来说就是第三行和第四行互换一下!

我首先尝试使用了分组,但是效果非常不理想。

然后又打算用排序来重新排一下,也是不可能的,一定是两个father_name为null的在一起。

后来想起自己曾经接触过的IFNULL函数还有CONCAT函数。

于是就有了下面的语句,下面加上的意思就是将 一级分类和二级分类都有一个统一的father_name,因为一级分类不存在father_name,所以将其进行concat函数进行连接。

select table1.n_id ,table1.n_name ,
table2.n_id as 'father_id',table2.n_name as 'father_name',
concat(IFNULL(table2.n_name,table1.n_name),'') 'nav_group'
from nav as table1 left join nav as table2
on table1.n_pre=table2.n_id
order by nav_group desc

这样就实现了下面的效果,满足了我的相关行排列在一起的需求。

图片.png

0 条评论