我用的数据库是mysql。
在做后台分类管理的时候遇到这样一个需求
就是将分类以树形菜单的方式展现出来。
我的导航栏的表在数据库中是这样的
然后,经过初步的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
查询效果:
但是我想要的效果是与分类相关的行放在一起。
简单来说就是第三行和第四行互换一下!
我首先尝试使用了分组,但是效果非常不理想。
然后又打算用排序来重新排一下,也是不可能的,一定是两个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
这样就实现了下面的效果,满足了我的相关行排列在一起的需求。