你有没有遇到过这样一种情况:
一张表就实现了一对多的关系,并且表中每一行数据都存在“爷爷-父亲-儿子-…”的联系,这也就是所谓的树形结构
对于这样的表很显然想要通过查询来实现价值绝对是不能只靠select * from table 来实现的,下面提供两种解决方案:
1.自连接
inner join 关键可以实现多种分类的查询,其实SQL很简单
1
2
3
4
5
6
7
8
9
10
11
SELECT
one.id one_id,
one.label one_label,
two.id two_id,
two.label two_label
FROM
course_category one
INNER JOIN course_category two ON two.parentid=one.id
INNER JOIN course_category three ON three.parentid=two.id
WHERE one.id='1' AND one.is_show='1' AND two.is_show='1'
ORDER BY one.orderby,two.orderby
也是规规矩矩的就查出一整棵树
这种查询的原则就是通过parentId去实现,“爷爷找爸爸,爸爸找儿子,儿子找孙子”,下面来逐帧慢放:
1.one
2.one,two
3.one,two,three
可以看到,只有在树的层级确定的情况下我才能选择性的去自连接子表,某种意义上来讲这种方法存在弊端,我要是insert进去层级更低的新子节点那我的sql就得改变,从而就造成了一个“动一发而牵全身”的硬编码问题,实在是不够稳妥!
领取专属 10元无门槛券
私享最新 技术干货