问题描述
现有这样的递归表(系统菜单表),表内容如下:怎样通过sql查询将父子归类,不要使用函数或存储过程。最终效果:表结构如下:CREATETABLE`sysmenu`(`id`bigint(20)NOTNULLAUTO_INCREMENT,`menuName`varchar(100)NOTNULLDEFAULT''COMMENT'菜单名称',`parentId`bigint(20)NOTNULLDEFAULT'0'COMMENT'父级ID',`url`varchar(200)NOTNULLDEFAULT''COMMENT'菜单路径',`sort`tinyint(4)DEFAULTNULLDEFAULT'1',`status`tinyint(4)NOTNULLDEFAULT'1'COMMENT'状态,0:不可用,1:可用',`creator`varchar(50)NOTNULLDEFAULT''COMMENT'创建人',`createTime`timestampNOTNULLdefaultCURRENT_TIMESTAMPonupdateCURRENT_TIMESTAMPCOMMENT'创建时间',PRIMARYKEY(`id`),UNIQUEKEY`index_menu_id`(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;
解决方案
本帖最后由 ideatechinfo 于 2014-08-20 17:35:53 编辑
解决方案二:
mysql不支持嵌套语句,所以,最简单的办法还是在你程序里解决其实不会效率太低,循环一遍就行支持嵌套的免费数据库比如有postgresql再或者需要更改数据库的表结构,方法有几个,如果可以更改表结构再细说
解决方案三:
可以更改表结构,请大神赐教
解决方案四:
这里有一个,从TheNestedSetModel那部分看看就行了这个的缺点是写的时候消耗太大,会动一个动全身再或者还有个办法没上面那个那么有理论依据但用着也挺爽就是加个path列,里面是当前行的所有parents比如你的表path/0000001/0000003/0000004/0000001/0000005/0000006写的时候只需要将parent的path取出加上parent的id即可,读的时候orderby这个path
解决方案五:
不用存储过程或者临时表很难,毕竟mysql是开源的,不像Oracle这类直接支持prior伪列如果确实不想在数据库层面处理,程序里面读出来用递归函数取子节点
解决方案六:
不是很懂你想表达什么自连接可不可以解决你的问题呀?
解决方案七:
orderbyip+parentid这样行不行?
解决方案八:
如果采用Mybatis框架该如何配置这种一对多的关联???
解决方案九:
求一个java递归读取树状表的源码,来读取以上数据结构并生成json字符串,谢谢!
解决方案十:
不可以自连接?
解决方案十一:
当只有两级菜单时自连接是可以满足的,但是多级以后自连接好像就满足不了树形结构了
解决方案十二:
groupbyparentId