mysql递归查询省市区 |
您所在的位置:网站首页 › 松山区属于哪个省市区 › mysql递归查询省市区 |
今天有个业务是选定区域名,表结构如下,lz_pm_area是表名:
我想到两种方法,一种是在业务代码层进行递归,第二种是在mysql里进行递归查询,我选择了后者 sql语句如下: SELECT c2.id,c2.pid,c2.area_name areaName,c2.area_type areaType FROM ( SELECT t1.id,IF(FIND_IN_SET(t1.pid, @pids) > 0, @pids := CONCAT(@pids, ',', t1.id), 0) AS leafNodeId FROM (SELECT @pids := 7 ) xxx ,(SELECT id, pid FROM `lz_pm_area`) t1 ) c3 INNER JOIN `lz_pm_area` c2 ON c2.id = c3.id WHERE c3.leafNodeId != 0对语句进行拆解分析: 这里是给变量pids赋值,后面的xxx不用理他,任意一个单词都可以 如果t1.pid在pids这个数组里的话,则将t1.id拼接在pids这个数组里, 不在的话置为0 这句看不懂可以去了解一下FIND_IN_SET函数,其实就是用来判断t1.pid是否在pids这个数组里 这是单独执行里面这句话的结果,可以看到leafNodeId这一列是包含左边的id的,否则为0 最后这部分就是将leafNodeId为0的去掉,因为这部分是没有关联的 这样我们就可以根据业务需求来进行递归查找了 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |