根据id查询所有子节点/父节点,mysql 以及ssm前后台处理流程

时间:2023-03-08 21:10:03

1、所示案例数据表结构设计如下所示:

根据id查询所有子节点/父节点,mysql 以及ssm前后台处理流程

2、案例数据如下所示:

根据id查询所有子节点/父节点,mysql 以及ssm前后台处理流程

3、mysql查询语句可以查询出父级目录信息:

注意:自己的数据表表名称,切记手动修改,字段名称(特别注意id,parent_id字段名称,不然肯定查询不出来的)。

 SELECT T2.*
FROM (
SELECT
@r AS _id,
(SELECT @r := parent_id FROM catelog WHERE id = _id) AS parent_id,
@l := @l + AS lvl
FROM
(SELECT @r := , @l := ) vars,
catelog h
WHERE @r <> ) T1
JOIN catelog T2
ON T1._id = T2.id
ORDER BY T1.lvl DESC

查询实例如下所示:

根据id查询所有子节点/父节点,mysql 以及ssm前后台处理流程

4、然后使用ajax来传递id的值,最后展示出来查询出来的名称即可:

 //查询目录
function findByDirectory(id){
var url = 'cateLogAction!findParentMessageById.action?id='+id;
$.ajax({
type : 'get',
url : url,
dataType : 'json',
global : false,
async : true,
success : function(data) {
//alert(data.parentMessage);//打印测试显示内容
var catelogName = [];
for(var i=;i<data.parentMessage.length;i++){
//alert(data.parentMessage[i].name);
//如果是最后的子目录,后面不加/
if(i == data.parentMessage.length - ){
var name = data.parentMessage[i].name
}else{
var name = data.parentMessage[i].name + "/";
}
catelogName += name;
}
//使用id设置值
$("#directory").text(catelogName);
}
});
}

由于使用的框架ssm是struts,spring,mybatis(ibatis)框架,过程调用简单,省略,只书写了核心部分。

 <select id="findParentMessageById" resultMap="cateLogInstanceMap">
<![CDATA[
SELECT T2.*
FROM (
SELECT
@r AS _id,
(SELECT @r := parent_id FROM catelog WHERE id = _id) AS parent_id,
@l := @l + AS lvl
FROM
(SELECT @r := , @l := ) vars,
catelog h
WHERE @r <> ) T1
JOIN catelog T2
ON T1._id = T2.id
ORDER BY T1.lvl DESC
]]>
</select>

5、由于我需要的是这种格式的展示形式,所以,展示如下所示,获取其他值,自行将获取到前台的数据进行拼接即可。

根据id查询所有子节点/父节点,mysql 以及ssm前后台处理流程

待续......