我怎么一次性查出 用户的菜单 和 菜单的全部上级菜单?
4 个解决方案
#1
最好有表结构和数据可以分析。
#2
表结构,测试数据,预期结果,都说一下。别人猜不出来。
#3
不好意思,描述的有些简单,补充下,用的mysql :
比如数据结构如下:
CREATE TABLE `t_menu` (
`id` int(11) NOT NULL COMMENT '菜单id',
`name` varchar(30) NOT NULL,
`parent_id` varchar(50) NOT NULL COMMENT '父菜单iD序列(一级菜单ID.二级菜单ID.三级菜单ID...)'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- ----------------------------
-- Records of t_menu
-- ----------------------------
INSERT INTO `t_menu` VALUES ('1', '一级菜单1', '');
INSERT INTO `t_menu` VALUES ('2', 二级菜单1', '1');
INSERT INTO `t_menu` VALUES ('3', '三级菜单1', '1.2');
INSERT INTO `t_menu` VALUES ('4', '三级菜单2', '1.2');
INSERT INTO `t_menu` VALUES ('5', '四级1', '1.2.4');
-------------------------------- 对应菜单如下图:
一级菜单1
|----------二级菜单1
|----------三级菜单1
|----------三级菜单2
|--------------四级菜单1
---------------------------------------------------
在保存用户菜单时只保留了【三级菜单1】、【三级菜单2】、【四级菜单1】的ID。
查询时想要还原上图的树形 菜单,也就是要查出 【二级菜单1】和【一级菜单1】 来
比如数据结构如下:
CREATE TABLE `t_menu` (
`id` int(11) NOT NULL COMMENT '菜单id',
`name` varchar(30) NOT NULL,
`parent_id` varchar(50) NOT NULL COMMENT '父菜单iD序列(一级菜单ID.二级菜单ID.三级菜单ID...)'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- ----------------------------
-- Records of t_menu
-- ----------------------------
INSERT INTO `t_menu` VALUES ('1', '一级菜单1', '');
INSERT INTO `t_menu` VALUES ('2', 二级菜单1', '1');
INSERT INTO `t_menu` VALUES ('3', '三级菜单1', '1.2');
INSERT INTO `t_menu` VALUES ('4', '三级菜单2', '1.2');
INSERT INTO `t_menu` VALUES ('5', '四级1', '1.2.4');
-------------------------------- 对应菜单如下图:
一级菜单1
|----------二级菜单1
|----------三级菜单1
|----------三级菜单2
|--------------四级菜单1
---------------------------------------------------
在保存用户菜单时只保留了【三级菜单1】、【三级菜单2】、【四级菜单1】的ID。
查询时想要还原上图的树形 菜单,也就是要查出 【二级菜单1】和【一级菜单1】 来
#4
楼主可查询 select ... connect by 语句
#1
最好有表结构和数据可以分析。
#2
表结构,测试数据,预期结果,都说一下。别人猜不出来。
#3
不好意思,描述的有些简单,补充下,用的mysql :
比如数据结构如下:
CREATE TABLE `t_menu` (
`id` int(11) NOT NULL COMMENT '菜单id',
`name` varchar(30) NOT NULL,
`parent_id` varchar(50) NOT NULL COMMENT '父菜单iD序列(一级菜单ID.二级菜单ID.三级菜单ID...)'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- ----------------------------
-- Records of t_menu
-- ----------------------------
INSERT INTO `t_menu` VALUES ('1', '一级菜单1', '');
INSERT INTO `t_menu` VALUES ('2', 二级菜单1', '1');
INSERT INTO `t_menu` VALUES ('3', '三级菜单1', '1.2');
INSERT INTO `t_menu` VALUES ('4', '三级菜单2', '1.2');
INSERT INTO `t_menu` VALUES ('5', '四级1', '1.2.4');
-------------------------------- 对应菜单如下图:
一级菜单1
|----------二级菜单1
|----------三级菜单1
|----------三级菜单2
|--------------四级菜单1
---------------------------------------------------
在保存用户菜单时只保留了【三级菜单1】、【三级菜单2】、【四级菜单1】的ID。
查询时想要还原上图的树形 菜单,也就是要查出 【二级菜单1】和【一级菜单1】 来
比如数据结构如下:
CREATE TABLE `t_menu` (
`id` int(11) NOT NULL COMMENT '菜单id',
`name` varchar(30) NOT NULL,
`parent_id` varchar(50) NOT NULL COMMENT '父菜单iD序列(一级菜单ID.二级菜单ID.三级菜单ID...)'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- ----------------------------
-- Records of t_menu
-- ----------------------------
INSERT INTO `t_menu` VALUES ('1', '一级菜单1', '');
INSERT INTO `t_menu` VALUES ('2', 二级菜单1', '1');
INSERT INTO `t_menu` VALUES ('3', '三级菜单1', '1.2');
INSERT INTO `t_menu` VALUES ('4', '三级菜单2', '1.2');
INSERT INTO `t_menu` VALUES ('5', '四级1', '1.2.4');
-------------------------------- 对应菜单如下图:
一级菜单1
|----------二级菜单1
|----------三级菜单1
|----------三级菜单2
|--------------四级菜单1
---------------------------------------------------
在保存用户菜单时只保留了【三级菜单1】、【三级菜单2】、【四级菜单1】的ID。
查询时想要还原上图的树形 菜单,也就是要查出 【二级菜单1】和【一级菜单1】 来
#4
楼主可查询 select ... connect by 语句