比如yjy_content_type表,parent_id为父级id,sort为排序字段,且父级和子级都需要根据自己的级别排序查询出来。
思路:在查询的时候先将父级的排序g_max_sort加到子级上(此字段主要是用于父级排序),然后用另一个字段sortg显示是否是同一组(有parent_id就用parent_id的值,否则用自己的id值)。
SELECT
a.`id`,
a.`parent_id`,
a.`sort`,
(CASE WHEN a.parent_id!=0 THEN b.sort ELSE a.sort END ) as g_max_sort,
(CASE a.parent_id WHEN 0 THEN a.id ELSE a.parent_id END ) as sortg,
a.STATUS AS status_text,
a.`content`,
a.`title`,
a.`status`,
a.create_time AS create_time_text
`yjy_content_type` `a` LEFT JOIN yjy_content_type b ON a.parent_id=b.id
ORDER BY g_max_sort desc ,sortg,parent_id,sort desc
连表是因为父级也需要排序,否则可以不用加g_max_sort和连表操作。
DROP TABLE IF EXISTS `org_tab`;
CREATE TABLE `org_tab` (
`id` bigint(8) NOT NULL AUTO_INCREMENT,
`org_name` varchar(50) NOT NULL,
`org...
set global log_bin_trust_function_creators=TRUE;
DROP FUNCTION IF EXISTS getProductCategoryChildIDs;
CREATE FUNCTION getProductCategoryChildIDs...
SELECT
@r AS _id,
(SELECT @r := parent_code FROM city_info WHERE city_code = _id) AS parent_id,
@l := @l + 1 AS lvl
本文综述了
MySQL
中CTE在处理
父子
结构
数据
查询
中的应用、优化策略,以及如何通过实际案例加深理解。
首先,文章介绍了CTE语法并给出一个
父子
结构
简单示例。随后,重点转向CTE递归
查询
的使用,通过一个实战示例展示了如何
查询
所有公司的路径(祖
级
列表),详细解释了CTE
查询
的逻辑和过程,强调了其在简化复杂层
级
查询
方面的优势。
在性能优化部分,文章强调了虑递归深度、索引使用、避免全表扫描的重要性,并提供了实践建议,指导读者如何根据数据规模调整
查询
策略。
根据父id
查询
下面所有子节点数据。
我们这里以sec_org(部门表)为例,在一个部门表里面包含org_id(子部门id)、parent_org_id(父部门id)、org_name(子部门名称)等字段,我们要实现通过传入一个部门id,
查询
出它下面的所有子部门记录的功能。
我们可以通过
Mysql
函数的递归调用来实现。
1.创建函数getChildrenOrg。
CRE...
在很多业务场景中,我们需要从
数据库
查询
一些树状
结构
的数据,多半以id,pid的形式存储记录。
在Oracle中,能够通过语法轻松实现
父子
级
间的递归
查询
,无论到父,子,孙,曾孙等多少
级
,都能查出来。
但是在
mysql
中,就没有像Oracle中那样有现成的语法直接调用了。
本篇文章里,我将带大家了解一种在sql中设置参数来进行递归
查询
的方法,如下:
设表test有以下字段:id,name,pi...
DROP TABLE IF EXISTS `merchant_region`;
CREATE TABLE `merchant_region` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`parent_id` int(11) NULL DEFAULT NULL,
`name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
PRIMAR
组织之间存在层
级
关系,人员可对应多个组织,对应的多个组织也可以存在上下
级
关系。
查询
某个人的组织的时候,需要把这个人对应的所有组织,和对应的每一个组织的所有上
级
都按序
查询
出来。
PersonListDto
public class PersonListDTO {
private Long id;
private String personCode;
private String name;
private String position;
select org_id from (
select t1.org_id,
if(find_in_set(parent_id, @pids) > 0, @pids := concat(@pids, ',', org_id), 0) as ischild
from (
select org_id,parent_id from olt_organization t
FROM(
SELECT @r AS _id,
(SELECT @r := parent_id FROM department WHERE id = _id) AS parent_id,
@a := @a + 1 AS tmp
(SELECT @r := '
查询
的子
级
id', @a := 0) vars,
department h -- 不可少
WHERE @r <>