当前位置: 首页 > news >正文

织梦模板免费seo服务外包价格

织梦模板免费,seo服务外包价格,网站二级栏目如何调用,在哪个网站做视频赚钱你有没有遇到过这样一种情况: 一张表就实现了一对多的关系,并且表中每一行数据都存在“爷爷-父亲-儿子-…”的联系,这也就是所谓的树形结构 对于这样的表很显然想要通过查询来实现价值绝对是不能只靠select * from table 来实现的&#xff0…

你有没有遇到过这样一种情况:
一张表就实现了一对多的关系,并且表中每一行数据都存在“爷爷-父亲-儿子-…”的联系,这也就是所谓的树形结构
在这里插入图片描述
对于这样的表很显然想要通过查询来实现价值绝对是不能只靠select * from table 来实现的,下面提供两种解决方案:

1.自连接

inner join 关键可以实现多种分类的查询,其实SQL很简单

SELECTone.id one_id,one.label one_label,two.id two_id,two.label two_label
FROMcourse_category oneINNER JOIN course_category two ON two.parentid=one.idINNER JOIN course_category three ON three.parentid=two.idWHERE 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就得改变,从而就造成了一个“动一发而牵全身”的硬编码问题,实在是不够稳妥!

2.递归!

向上递归

首先声明,如果mysql的版本低于8是不支持递归查询的函数的!
下面来看一下如何用递归优雅的实现,从树根查到树顶:
先来看一个简单的Demo

	with RECURSIVE t1 AS(SELECT 1 AS nunion allSELECT n+1 FROM t1 WHERE n<5)SELECT * from t1

在这里插入图片描述
该怎么理解这每一步呢?
WITH RECURSIVE t1 AS:
这是递归查询的开始,创建了一个名为t1的递归表。
SELECT 1 AS n:
在t1表中,插入了一个初始行,值为1,命名为n。
UNION ALL:
使用UNION ALL运算符将初始行和递归查询结果合并,形成递归步骤。这也就是下次递归的起点表
SELECT n+1 FROM t1 WHERE n<5:
递归部分的查询,从t1表中选择n加1的结果,当n小于5时进行递归。
SELECT * FROM t1:
最终查询,返回t1表的所有行。
其实在使用递归的过程只需要注意要去避免死龟就好!
如何去查开头的那张树形表呢?这样就好:

with recursive temp as (
select * from  course_category p where  id= '1'union all
select t.* from course_category t inner join temp on temp.id = t.parentid
)
select *  from temp order by temp.id, temp.orderby

下面我们逐帧分析:
在这里插入图片描述
其实关键的地方就在于第三步,在树根的基础上去找叶子:
神之一手:
select t.* from course_category t inner join temp on temp.id = t.parentid
这就是递归相较于第一种方式可以无视层级inner jion的关键,因为这个动作已经被递归自动完成了,递归巧妙地一点就在这里!

向下递归

基于向上递归父找子的思想,向下递归则是子找父,即在叶子基础上union all之后去找根
子的parentId=父的id

with recursive temp as (
select * from  course_category p where  id= '1-1-1'union all
select t.* from course_category t inner join temp on temp.parentid = t.id  
//temp表是下次递归的基础
)
select *  from temp order by temp.id, temp.orderby

值得注意的是Mysql为了避免无限递归递归次数为1000次,也可以人为来设置cte_max_recursion_depth和max_execution_time来自定义递归深度和执行时间
使用递归的好处无需言语,一次io连接就搞定了全部

http://www.tj-hxxt.cn/news/15224.html

相关文章:

  • 公司网站做优化成都网站快速排名优化
  • 网站源代码怎么上传郑州seo顾问热狗
  • 做网站干嘛人力资源培训机构
  • 京东优惠劵网站怎么做培训课
  • 欧美独立站建站怎么开网店新手入门
  • 做网站java好还是.net好品牌宣传文案范文
  • 常德做网站河南seo优化
  • 网站数据接口怎么做灰色词排名推广
  • 蓬莱做网站哪家好外链网
  • 网站制作时间代码深圳网站建设的公司
  • 瑞安做网站多少钱seo推广软
  • 手机网页开发模板佛山做seo推广公司
  • 企业网站建设方案书目录免费网站的平台
  • 在线做图表的网站爱站网关键词长尾挖掘工具
  • 秦皇岛做网站的公司站长工具seo综合查询推广
  • 自己怎么用h5做网站环球网广东疫情最新消息
  • 做博客网站赚钱吗手机百度app下载安装
  • 做网站可以参考的网站宁波网站推广平台效果好
  • 安装wordpress插件关键词优化推广排名多少钱
  • 辽宁沈阳疫情最新消息邯郸seo
  • 网站建设需要实现哪些目标沈阳seo按天计费
  • 宿州企业网站推广windows优化工具
  • 怎么在工商局网站做股东变更长沙有实力的关键词优化价格
  • 网上做问卷调查赚钱哪些网站好西安关键词排名软件
  • 做网站准备什么问题免费发广告的软件
  • 电子商务网站建设报告国际新闻
  • 丰台企业网站建设脚本外链平台
  • 风景网页制作模板淘宝怎么优化关键词步骤
  • 青白江建设局网站鹤壁网络推广哪家好
  • 专业做网站公司 前景长沙百度提升排名