层级分类菜单,拼接排序字段成完整排序,创建视图

软发001 2016-04-20 06:01:07
mysql中有一张表,存放的是分类菜单,通过p_id字段来实现层级关系,有个排序字段,实现同级排序,我现在想建个视图重新把排序字段拼接成一个完整的排序,包含父节点的排序。
表 menu如下
id name p_id order
1 A 0 0
2 B 0 1
3 AA 1 0
4 AB 1 1
5 AAA 3 0
视图 menu_v如下
id name p_id neworder
1 A 0 0
2 B 0 1
3 AA 1 0-0
4 AB 1 0-1
5 AAA 3 0-0-0
...全文
300 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2016-04-21
  • 打赏
  • 举报
回复
select m2.id,m2.name,m2.p_id,
	concat(
		if(m0.order is null,'',concat(m0.order,'-')),
		if(m1.order is null,'',concat(m1.order,'-')),
		m2.order
	) as neworder
from menu m2 left join menu m1 on m2.p_id=m1.id
	left join menu m0 on m1.p_id=m0.id
软发001 2016-04-21
  • 打赏
  • 举报
回复
请各位mysql高手、版主再研究一下这个问题如何解决。 由于每一层的order限制是三位数家,所以完善一下 视图 menu_v如下 id name p_id neworder 1 A 0 000 2 B 0 001 3 AA 1 000-000 4 AB 1 000-001 5 AAA 3 0000-000-000 这样能够实现某一节点的完美排序
软发001 2016-04-21
  • 打赏
  • 举报
回复
如果深度只有3,请问如何快速实现?
软发001 2016-04-21
  • 打赏
  • 举报
回复
补0的语句如下:
SELECT m2.id, m2.name, m2.p_id, CONCAT( IF( m0.order IS NULL ,  '', CONCAT( LPAD( m0.order, 3, 0 ) ,  '-' ) ) , IF( m1.order IS NULL ,  '', CONCAT( LPAD( m1.order, 3, 0 ) ,  '-' ) ) , LPAD( m2.order, 3, 0 ) ) AS neworder
FROM menu m2
LEFT JOIN menu m1 ON m2.p_id = m1.id
LEFT JOIN menu m0 ON m1.p_id = m0.id
ORDER BY  `neworder` ASC 
软发001 2016-04-21
  • 打赏
  • 举报
回复
引用 4 楼 ACMAIN_CHM 的回复:
select m2.id,m2.name,m2.p_id,
concat(
if(m0.order is null,'',concat(m0.order,'-')),
if(m1.order is null,'',concat(m1.order,'-')),
m2.order
) as neworder
from menu m2 left join menu m1 on m2.p_id=m1.id
left join menu m0 on m1.p_id=m0.id

执行结果:

感觉不难,可是自己写不出来。看来还是功力不到。两级关联还能写写,三级就感觉太难写不出来了。
有时间还要多看多写mysql语句。
ACMAIN_CHM 2016-04-20
  • 打赏
  • 举报
回复
http://blog.csdn.net/acmain_chm/article/details/4142971 MySQL中进行树状所有子节点的查询 在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点。但很遗憾,在MySQL的目前版本中还没有对应的功能。 在MySQL中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度是4, 那么所有节点为根的树的深度均不会超过4,则我们可以直接通过left join 来实现。 但很多时候我们...

56,912

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧