MySQL同表连接查询问题:PHP文件夹结构场景下的实现困惑
解决同表查询子文件夹的问题
嘿,我来帮你搞定这个查询问题!你之前的SQL逻辑有点绕,其实不用把两个条件硬凑在同一行里,咱们用两种简单的方法就能实现需求:
方法1:子查询(简单直接)
这种方式最直观,先通过uniq找到目标文件夹的id,再用这个id去筛选所有子文件夹:
SELECT label, parent_id FROM folders WHERE parent_id = (SELECT id FROM folders WHERE uniq = 'w2d4f6');
解释一下:
- 括号里的子查询会先返回
uniq='w2d4f6'对应的id(也就是1) - 外层查询就会找出所有
parent_id等于这个值的记录,也就是dir 2那条数据
方法2:自连接(更灵活)
如果以后你需要同时获取父文件夹的信息,自连接会更方便。咱们把同一张表当成两个表来用,给它们起不同的别名:
SELECT child.label AS child_label, child.parent_id, parent.label AS parent_label FROM folders AS parent JOIN folders AS child ON child.parent_id = parent.id WHERE parent.uniq = 'w2d4f6';
解释一下:
- 把表分别命名为
parent(父文件夹表)和child(子文件夹表) - 通过
child.parent_id = parent.id关联父子关系 - 过滤条件
parent.uniq='w2d4f6'指定要查询哪个父文件夹的子项
小提示
如果以后需要查询所有层级的子文件夹(比如子文件夹的子文件夹,一直往下),可以用MySQL的递归CTE(Common Table Expression),不过当前需求用上面两种方法就完全足够啦。
内容的提问来源于stack exchange,提问作者Daniel Williams
相关产品推荐
相关产品推荐

