方法一: 使用inner join来查询
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
WHERE
one.parentid = '1'
AND one.is_show = '1'
AND two.is_show = '1'
查询结果
方法二: 使用mysql递归实现多级查询
WITH recursive t1 AS (
select * from course_category p where id = '1'
union all
select t.* from course_category t INNER JOIN t1 on t1.id=t.parentid
)
select * from t1 order by t1.id, t1.orderby
查询结果
-
普通连接查询:
- 目的:这个查询旨在获取给定父类别ID (
one.parentid = '1'
) 的直接子类别。 - 方法:使用 INNER JOIN 连接
course_category
表两次(用别名one
和two
),连接条件是two.parentid = one.id
,这样可以选择给定父类别ID的直接子类别。 - 结果:返回的结果集仅包括给定父类别ID的直接子类别,不包括子类别的子类别或更多层级的子孙类别。
- 目的:这个查询旨在获取给定父类别ID (
-
递归查询 (
WITH RECURSIVE
):- 目的:这个查询旨在获取给定类别ID (
id = '1'
) 及其所有子孙类别。 - 方法:使用
WITH RECURSIVE
语句进行递归查询。首先选择id = '1'
的类别,然后基于之前的结果(即t1
)来获取其子类别。这个过程会不断重复,直到没有更多的子类别为止。 - 结果:返回的结果集包括给定的类别ID及其所有子孙类别。如果一个类别有多个层级的子类别,这个查询会把它们都包括进来。
- 目的:这个查询旨在获取给定类别ID (
总结:
- 递归查询用于获取多层级的子孙类别,而普通连接查询只能获取直接的子类别。
- 如果你的
course_category
表有很多层次的类别,那么递归查询可以让你轻松获取所有关联的子孙类别,而普通连接查询只能获取一层的子类别。