mysql怎么查树形结构 mysql查询树形结构数据

MySQL怎么查询树形结构的表的数据一般比较普遍mysql怎么查树形结构的就是四种方法mysql怎么查树形结构:(具体见 SQL Anti-patterns这本书)
Adjacency Listmysql怎么查树形结构:每一条记录存parent_id
Path Enumerationsmysql怎么查树形结构:每一条记录存整个tree path经过的node枚举
Nested Sets:每一条记录存 nleft 和 nright
Closure Table:维护一个表mysql怎么查树形结构,所有的tree path作为记录进行保存 。
MYSQL 查询树形结构数据 , 查询某个节点下的所有子节点数据 。java版mysql怎么查树形结构的实际例子 。类同mysql怎么查树形结构你说mysql怎么查树形结构的情况
private void findChildList(AssetType parent,ListAssetType list){
String hql = "from AssetType a where a.parentAssetType.assetTypeId=? ORDER BY a.sort,a.assetTypeName asc";
ListAssetType childList = this.assetTypeDao
.getEntityManager()
.createQuery(hql)
.setParameter(1, parent.getAssetTypeId())
.getResultList();
int size = childList.size();
if(size0){
for (int i = 0; isize; i++) {
AssetType assetType = childList.get(i);
ListAssetType childs = assetType.getChildAssetType();
if(childs.size()0){
list.addAll(childs);
this.findChildList(assetType, list);//递归查询节点mysql怎么查树形结构的子节点
}
【mysql怎么查树形结构 mysql查询树形结构数据】}
}
}
mysql 如何查询一个带有树结构的表的数据当然这种结构就不要追求什么效率了 。如果要效率高的 , 只能改表结构 。
1:select p2.id from table p1 ,table p2 where p1.id=p2.pid and p1.id=0
2:假设表名是tree
SQL codeselect distinct a.id from tree as a inner join tree as b on (a.pid = b.pid) where b.pid =0;
select distinct a.id from tree as a inner join tree as b on (a.pid = b.pid) where b.pid =2;
3.通过程序或数据库的store procedure来实现了 。在mySQL中无法以一句SQL实现 。
mysql树形结构的查询案例表结构
这种情况可以通过左连接实现
可以看到左连接是以左表为基准,通过关联关系id = pid去找到对应的上级组织记录,所以空的id找不到对应的记录 , 返回空
有时候我们需要获取某个组织的完整路径 如
部门C/部门C_2/部门C_2_1/部门C_2_1_1
编写存储过程,生成一个临时表tmpLst , 按照层级把每一条记录插入到临时表,然后每次从临时表查当前层级的组织,循环去查组织表的上级组织,直到结果ROW_COUNT = 0为止,代表当前层级下的所有组织已经是最后一级
查询到的结果 , 大家可以自行优化一下显示方式和查询的字段
当然还有另一种方式,从设计上解决
如新加一个唯一约束,把组织的约束定义为 ORG_001_ORG_001_002_ORG_001_003 这样的形式
当需要查询ORG_001所有的下级时,只需要查询约束 like ORG_001% 即可
当需要查询ORG_001_002所有上级时,只需要查询约束 like %ORG_001_002
不过问题在于如果组织的存在架构调整,如,ORG_001_002调整到了 ORG_002下,因为树型结构变化了,直接用like无法查询到正确数据,这个时候要考虑是否允许调整或者调整后修改对应的唯一约束
关于mysql怎么查树形结构和mysql查询树形结构数据的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读