例:
表名为:crm_system_dictionary
表结构如下
根据父级ID无限向下寻找
SELECT
`temp_table`.levels,
crm_system_dictionary.*
FROM
(
SELECT
@ids AS _ids,
( SELECT @ids := GROUP_CONCAT( `dictionary_id` ) FROM crm_system_dictionary WHERE FIND_IN_SET( `parent_id`, @ids ) ) AS cids,
@l := @l + 1 AS levels
FROM
crm_system_dictionary,
( SELECT @ids := '1', @l := 0 ) b
WHERE
@ids IS NOT NULL
) `temp_table`,
crm_system_dictionary
WHERE
FIND_IN_SET( crm_system_dictionary.`dictionary_id`, `temp_table`._ids )
SELECT
`虚表`.levels,
`你的表名`.*
FROM
(
SELECT
@ids AS _ids,
( SELECT @ids := GROUP_CONCAT( `主键/父级字段` ) FROM `你的表名` WHERE FIND_IN_SET( `记录父级信息的字段`, @ids ) ) AS cids,
@l := @l + 1 AS levels
FROM
`你的表名`,
( SELECT @ids := '这里填写需要查找的父级ID,可以多个,使用英文逗号分隔', @l := 0 ) b
WHERE
@ids IS NOT NULL
) `虚表`,
`你的表名`
WHERE
FIND_IN_SET( `你的表名`.`主键/父级字段`, `虚表`._ids )
根据子分类向上寻找直至顶级分类
SELECT
`temp_table`.levels,
crm_system_dictionary.*
FROM
(
SELECT
@`dictionary_id` AS _id,
( SELECT @`dictionary_id` := `parent_id` FROM crm_system_dictionary WHERE `dictionary_id` = @`dictionary_id` ) AS _pid,
@l := @l + 1 AS levels
FROM
crm_system_dictionary,
( SELECT @`dictionary_id` := '3', @l := 0 ) b
WHERE
@`dictionary_id` > 0
) `temp_table`,
crm_system_dictionary
WHERE
`temp_table`._id = crm_system_dictionary.`dictionary_id`
SELECT
`虚表`.levels,
`你的表名`.*
FROM
(
SELECT
@`主键/父级字段` AS _id,
( SELECT @`主键/父级字段` := `记录父级信息的字段` FROM `你的表名` WHERE `主键/父级字段` = @`主键/父级字段` ) AS _pid,
@l := @l + 1 AS levels
FROM
`你的表名`,
( SELECT @`主键/父级字段` := '这里填写需要查找的子集ID,可以多个,使用英文逗号分隔', @l := 0 ) b
WHERE
@`主键/父级字段` > 0
) `虚表`,
`你的表名`
WHERE
`虚表`._id = `你的表名`.`主键/父级字段`
声明:
本文采用
BY-NC-SA
协议进行授权,如无注明均为原创,转载请注明转自
一颗大萝北
本文地址: mysql无限级分类根据父级ID向下寻找及无限向上寻找
本文地址: mysql无限级分类根据父级ID向下寻找及无限向上寻找