问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

MYSQL 查询树形结构数据,查询某个节点下的所有子节点数据。

发布网友 发布时间:2022-04-26 11:49

我来回答

2个回答

懂视网 时间:2022-04-07 19:08

更多相关免费学习推荐:mysql教程(视频)

mysql查询子节点的方法:

创建menu表:

CREATE TABLE `menu` (
 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '菜单id',
 `parent_id` int(11) DEFAULT NULL COMMENT '父节点id',
 `menu_name` varchar(128) DEFAULT NULL COMMENT '菜单名称',
 `menu_url` varchar(128) DEFAULT '' COMMENT '菜单路径',
 `status` tinyint(3) DEFAULT '1' COMMENT '菜单状态 1-有效;0-无效',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12212 DEFAULT CHARSET=utf8;

插入数据:

INSERT INTO `menu` VALUES ('0', null, '菜单0', ' ', '1');
INSERT INTO `menu` VALUES ('1', '0', '菜单1', '', '1');
INSERT INTO `menu` VALUES ('11', '1', '菜单11', '', '1');
INSERT INTO `menu` VALUES ('12', '1', '菜单12', '', '1');
INSERT INTO `menu` VALUES ('13', '1', '菜单13', '', '1');
INSERT INTO `menu` VALUES ('111', '11', '菜单111', '', '1');
INSERT INTO `menu` VALUES ('121', '12', '菜单121', '', '1');
INSERT INTO `menu` VALUES ('122', '12', '菜单122', '', '1');
INSERT INTO `menu` VALUES ('1221', '122', '菜单1221', '', '1');
INSERT INTO `menu` VALUES ('1222', '122', '菜单1222', '', '1');
INSERT INTO `menu` VALUES ('12211', '1222', '菜单12211', '', '1');

得到的目录结构如下图所示:

aae031375fbee34836f6089e2449b4e.png

查询

先贴出sql语句:

select id from (
  select t1.id,
  if(find_in_set(parent_id, @pids) > 0, @pids := concat(@pids, ',', id), 0) as ischild
  from (
   select id,parent_id from re_menu t where t.status = 1 order by parent_id, id
   ) t1,
   (select @pids := 要查询的菜单节点 id) t2
  ) t3 where ischild != 0

比如,要查询菜单节点12的所有子节点,则查处的结果为:

0a844d9742cdf679220d22a5a1bdad4.png

热心网友 时间:2022-04-07 16:16

java版的实际例子。类同你说的情况

private void findChildList(AssetType parent,List<AssetType> list){
String hql = "from AssetType a where a.parentAssetType.assetTypeId=? ORDER BY a.sort,a.assetTypeName asc";

List<AssetType> childList = this.assetTypeDao
.getEntityManager()
.createQuery(hql)
.setParameter(1, parent.getAssetTypeId())
.getResultList();
int size = childList.size();
if(size>0){
for (int i = 0; i < size; i++) {
AssetType assetType = childList.get(i);
List<AssetType> childs = assetType.getChildAssetType();
if(childs.size()>0){
list.addAll(childs);
this.findChildList(assetType, list);//递归查询节点的子节点
}
}
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
是选诺顿杀毒软件好还是NOD32好? 诺顿好还是NOD32好???请高手指点 诺顿安全软件和ESET NOD32安全软件相比,谁的防护.杀毒更强,功能更多... 诺顿和NOD32这两个杀毒软件哪个比较好? 什么是土地二次抵押 "口似含莲,乾姜之手"是什么意思? 乾姜的意思是什么 都说Pinnacle Food公司各方面做的好,有对这家了解的吗 空调蒸发箱多久清洗一次 空调蒸发箱需要清洗吗 苹果xr流量设置 手机音响孔进水了怎么办 Excel操作技巧,用RANK函数一键排名,省时省力! 钉钉学校刷脸通知怎么弄? 钉钉打卡录脸录错了退群再进就可以重新录了吧? 钉钉魔点校园请假人脸录入怎么重新提交重新录入 新股申购需要什么条件?自己的炒股账号里必须要有价值10000元股票或现金才能申购么? 打新股的门槛是什么 怎样把CR2格式转换为JPG 格力空调显示E1是什么意思? 格力变频空调开机显示ee怎么解决 我使用的华为手机型号是cHE-TⅠooH但忘记解锁密码怎么办? che1这个手机有otg吗? 华为cHE一TL00型号手机,换屏幕多少钱? 支付宝公交卡要充值吗?还是直接余额宝扣? 手机apper ld密码修改 怎么设置apple id的用户名和密码 Apple ID的密码要怎么设置 Apple ID的密码怎么设置? 检验报告封面上的MA、AL标志是什么意思? 可善挺室温放8分钟后又冷藏可以吗 数据库查询:查询父节点数据下的所有终结子节点 mysql如何根据很多子节点查询出父节点,只要一条路径上的 mysql怎么查询树形结构的所有上级,你这个问题是怎么解决的?求指导_百 ... mysql查询一个表,实现递归查询 mysql 多字段排序查询上一条下一条,怎么实现?? mysql 根据时间查询某个元素的上一个元素与下一个元素 mysql查询一个节点的根节点 mysql多级树形结构数据,随着时间推移下级推荐会员级数会回来越多,如... mysql多级查询 数据库语句的递归查询求助 mysql如何递归汇总? MySQL 数据如何查询一个用户的所有下级用户 mysql优化查询速度 为什么恒瑞医药股票这么便宜 现在那些医药股票可以买 华东医药股票怎么看? 华东医药股票何时跌到底 华东医药股票最低是多少钱 人福医药这支倒霉股昨天卖今天涨,今天买回来又开始跌,倒霉股市,倒霉国家 华北制药今天股票的走势