例:
表名为: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 = `你的表名`.`主键/父级字段` 
说点什么
支持Markdown语法
好耶,沙发还空着ヾ(≧▽≦*)o
Loading...