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

DBAPI如何用SQL将多表关联查询出树状结构数据(嵌套JSON格式)

场景描述

  • 假设数据库中有3张表如下:

客户信息表

图片


订单表

图片

订单详情表

图片

一个客户有多个订单,一个订单包含多个产品信息,客户-订单-产品就构成了3级的树状结构,如何查询出如下树状结构数据呢?

[{"customer_age": 50,"orders": [{"order_phone": "15300000000","order_address": "广东省广州市","order_id": 60001,"products": [{"product": "手机","num": 1}]}, {"order_phone": "15300000000","order_address": "广东省深圳市","order_id": 60002,"products": [{"product": "电脑","num": 2}, {"product": "足球","num": 1}]}],"customer_name": "刘德华","customer_id": 5001}, {"customer_age": 20,"orders": [{"order_phone": "13200000000","order_address": "上海市","order_id": 60003,"products": [{"product": "口红","num": 1}, {"product": "衣服","num": 2}]}],"customer_name": "刘亦菲","customer_id": 5002}
]

案例实操

数据准备

  • 用SQL关联查询出所有信息

图片

可以看到只要对这个结果进行两次分组,就可以得到树状结构数据了。第一次按customer_id分组,得到一个客户下的所有订单信息,然后对订单信息按order_id分组,得到一个订单下的所有产品信息。这个就是实现思路,DBAPI官方已经提供了插件来进行数据格式转换。

插件安装

  • 从官网进入插件市场

图片

  • 下载高级树状结构数据插件

图片

  • 将下载的插件放入DBAPI安装目录下的lib目录并重启DBAPI即可

创建API

  • 填写关联查询的SQL语句,选择插件并填写插件参数如下:

[{"groupBy": "customer_id","childrenName": "orders","fields": ["customer_name", "customer_age"]}, {"groupBy": "order_id","childrenName": "products","fields": ["order_address", "order_phone"]}
]

图片

插件参数的意思就是第一次按customer_id分组,得到一个客户下的所有订单信息并命名为 orders ,同时取出 customer_name customer_age 两个属性;

然后对订单信息按order_id分组,得到一个订单下的所有产品信息并命名为 products,同时取出 order_address order_phone 两个属性;

最后一级(第三级)就是订单中的所有产品信息,有哪些字段就是取决于SQL查询出的所有字段去除掉前面父级用掉的字段后,剩下的字段。

测试数据

  • 发送请求可以看到数据已经按照树状结构返回了

图片

  • 数据格式化后如下

{"data": [{"customer_age": 50,"orders": [{"order_phone": "15300000000","order_address": "广东省广州市","order_id": 60001,"products": [{"product": "手机","num": 1}]}, {"order_phone": "15300000000","order_address": "广东省深圳市","order_id": 60002,"products": [{"product": "电脑","num": 2}, {"product": "足球","num": 1}]}],"customer_name": "刘德华","customer_id": 5001}, {"customer_age": 20,"orders": [{"order_phone": "13200000000","order_address": "上海市","order_id": 60003,"products": [{"product": "口红","num": 1}, {"product": "衣服","num": 2}]}],"customer_name": "刘亦菲","customer_id": 5002}],"msg": null,"success": true
}

插件文档

插件文档地址

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 论文解读:LONGWRITER: UNLEASHING 10,000+ WORD GENERATION FROM LONG CONTEXT LLMS
  • 精准掌控,速看顶级软件资产管理方案,让您企业软件资产一目了然!
  • ArcGIS Pro基础:状态栏显示栏的比例尺设置和经纬度位置
  • 微服务:服务的注册与调用和OpenFiegn
  • 未来展望:观测云技术的发展与企业业务的融合
  • 【PHP入门教程】PHPStudy环境搭建+HelloWorld运行
  • 【机器学习】联邦学习技术
  • 代码随想录DAY23 - 回溯算法 - 08/22
  • Axure RP 9高手速成秘籍:解锁终极快捷键,设计效率飙升10倍!
  • Unity动画模块 之 3D模型导入基础设置 Rig页签
  • 51单片机-LED灯蜂鸣器数码管按键DS18B20温度传感器
  • git 指令
  • [数据集][目标检测]电力场景轭式悬架锈蚀分类数据集6351张2类别
  • 鸿蒙卡片服务开发
  • linux容器基础-namespace-3(pid)
  • 《剑指offer》分解让复杂问题更简单
  • 2019年如何成为全栈工程师?
  • canvas 高仿 Apple Watch 表盘
  • Consul Config 使用Git做版本控制的实现
  • DataBase in Android
  • ES6--对象的扩展
  • express如何解决request entity too large问题
  • JDK 6和JDK 7中的substring()方法
  • MYSQL 的 IF 函数
  • nfs客户端进程变D,延伸linux的lock
  • opencv python Meanshift 和 Camshift
  • Python3爬取英雄联盟英雄皮肤大图
  • react-native 安卓真机环境搭建
  • React的组件模式
  • vue-cli在webpack的配置文件探究
  • vue自定义指令实现v-tap插件
  • Yii源码解读-服务定位器(Service Locator)
  • 飞驰在Mesos的涡轮引擎上
  • 分布式任务队列Celery
  • 高性能JavaScript阅读简记(三)
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 聊聊directory traversal attack
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 双管齐下,VMware的容器新战略
  • 通过几道题目学习二叉搜索树
  • 一天一个设计模式之JS实现——适配器模式
  • 栈实现走出迷宫(C++)
  • 最近的计划
  • 回归生活:清理微信公众号
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • $(selector).each()和$.each()的区别
  • (09)Hive——CTE 公共表达式
  • (11)MSP430F5529 定时器B
  • (C11) 泛型表达式
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (利用IDEA+Maven)定制属于自己的jar包
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • (十)DDRC架构组成、效率Efficiency及功能实现