My SQL 中怎么递归查询所有的父节点

GC是一堵墙 2013-11-01 03:32:33

怎么根据某个menuId一直往上查,查到所有的父节点,我用的是my sql 数据库。其SQL语句怎么写?
...全文
6678 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
彭无纪 2015-12-10
  • 打赏
  • 举报
回复
解决了来回一句,不贴出来,这是哪种人
橙子BA 2013-11-29
  • 打赏
  • 举报
回复
怎么解决的啊,求解
GC是一堵墙 2013-11-07
  • 打赏
  • 举报
回复
已近解决了!!用存储过程
qiuqiupeng 2013-11-04
  • 打赏
  • 举报
回复
查出来的结果集如何处理啊
kobe8free 2013-11-01
  • 打赏
  • 举报
回复
mysql不支持这个,楼主可以考虑一下自己写个放在类中 循环遍历取父ID,拼成string 或者 json 再或者只有更改表结构, 如A id:01 B id:0101 C id:010101
爪哇三郎 2013-11-01
  • 打赏
  • 举报
回复

    
//获取表中所有id
protected List<Long> getIdList(String sql, Object ... params) {
	return xxx;
}

//获取该menu下的所有子节点
private List<Long> getMenuChildrenIds(long menuId) {
        String sql = "select menu_id from test_tb where p_id = ? ";
        return getIdList(sql, menuId);
}
    
public void getAllChildren(long menuId, List<Long> menuIdList) {
        List<Long> childrenIds = getMenuChildrenIds(menuId);
        for (long menu_Id : childrenIds) {
            menuIdList.add(menu_Id);
	    //计数
            int count = geliDao.count("select count(1) from test_tb where p_id = ? ", menu_Id, status);
            if (count > 0) {
                getAllChildren(menu_Id, menuIdList);
            }
        }
}

//
public List<Menu> getMenuChildren(long menuId) {
        return orm.list(Menu.class, getMenuChildrenIds(menuId    ).toArray());
    }

//执行,全找出来menuIds,放到list里面
List<Long> menuIds = new ArrayList<Long>();
menuIds.add(menu.getMenuId());
getAllChildren(menu.getMenuId(), menuIds);					
大概就是这么个意思了,我也胡乱贴上去的,希望对你有帮助
GC是一堵墙 2013-11-01
  • 打赏
  • 举报
回复
在my sql 中怎么替代上面的SQL啊!!
GC是一堵墙 2013-11-01
  • 打赏
  • 举报
回复
我以前是这样写的,今天发现my sql 中没有start with ... connect by prior
爪哇三郎 2013-11-01
  • 打赏
  • 举报
回复
这在oracle中非常简单

select ... select ...start with ... connect by prior ...
在mysql中里面没有这么便利的内置函数,要么你写存储过程或者函数,要么在自己在java代码端写递归函数,通常是写递归函数的,dba不会随便让你乱改数据库的
nicholasbobo 2013-11-01
  • 打赏
  • 举报
回复
只用一句SQL是办不到的,有个办法是在程序中写个递归的方法,方法参数是你想要查询的节点和一个List,然后方法里根据此节点去查父节点,当查出来的父节点不是“0”就把父节点放入参数里的List,并且递归调用自己,直到父节点为“0”,最后,参数的List里的值就是你要的结果了
sunbo624 2013-11-01
  • 打赏
  • 举报
回复
最简单的就是增加一列 code id code pid 1 001 0 2 002 0 3 001001 1 4 001002 1 5 002001 2 6 002001001 5 比如查id为6的根菜单 只要取code=前3位就行
GC是一堵墙 2013-11-01
  • 打赏
  • 举报
回复
我是新手 能把SQL语句写出来吗??谢了啊!!
tony4geek 2013-11-01
  • 打赏
  • 举报
回复
有sql 和存储过程 sql存储过程

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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