mysql 数据库中、根据4个级别查询、(管理处parent_id=0、小区=1、楼栋=2、单元=3)、sql语句怎么写?

mysql 数据库中、根据4个级别查询、(管理处parent_id=0、小区=1、楼栋=2、单元=3)、sql语句怎么写?,第1张

你的描述很清晰,但是你将问题复杂化了,没有分析清楚其中的思路,你如果要查找楼栋2,你必须输入查询条件为楼栋2的名称,那么查找语句就很简单,select district _name form tablename where id = (select parent_id from tablename where distict_name = "") union select district _name from table name where parent_id = (select id from tablename where distict_name ="" ) ,我这种只可以查询上下两个级别,如果你想扩充,那么写存储过程,进行判断,存储过程中输入两个参数,一个是名称,一个是等级,根据等级判断执行不同的案例。

这个需要用程序递归处理

$dept_tree=[]

$deptid = 19

while($deptid>0){

    //假设你的数据库查询是这个函数,根据条件直接查询一条记录返回

    $dept = getone('department',['id'=>$deptid])

    //防止数据丢失出错

    if(empty($dept))break

    

    array_unshift($dept_tree,$dept)

    $deptid = $dept['dep_parentid']

    

    //如果需要防止数据错乱出现递归,这里可以判断一下

    if(in_array($deptid,array_column($dept_tree,'id') !== false){

        //说明职位关系乱了,有死循环

        break

    }

}

可以把这段代码封装成一个函数使用。这里就不论从哪一级开始查询了,总是能把该职位及其上级全部查询出来,按顺序放进数组里

$dept_tree 类似这样

array(

    0=>array(

    'id'=>1,

    'dep_parentid'=>0,

    'dep_name'=>'顶级',

    ),

    1=>array(

    'id'=>2,

    'dep_parentid'=>1,

    'dep_name'=>'国灿金融',

    ),

    2=>array(

    'id'=>4,

    'dep_parentid'=>2,

    'dep_name'=>'招聘部',

    ),

    3=>array(

    'id'=>19,

    'dep_parentid'=>4,

    'dep_name'=>'经理助理',

    ),

)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7158169.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-02
下一篇 2023-04-02

发表评论

登录后才能评论

评论列表(0条)

保存