MySQL无限极分类实现与技巧(mysql无限极分类)

MySQL无限极分类实现与技巧

MySQL无限极分类是为大规模互联网应用设计的一种分类方法,无限极分类的关键是采用结构化的路径进行组织。比如常见的CMS系统,允许分类层级可以延伸到任意深度。

无限极分类数据库表结构是管理无限极分类系统必不可少的部分,多数情况下,使用MySQL实现无限极分类时,表结构至少需要包含以下3个字段:

**字段名称** | **数据类型** | **描述**

—|—|—

id | int | 唯一标识

name | varchar(20) | 名称

parentId | int | 父级编号

通过定义这3个字段,就可以实现一个无限极分类的表结构:

**id** | **name** | **parentId**

—|—|—-

1 | 默认分类 | 0

2 | 技术分类 | 1

3 | 前端技术 | 2

4 | 后端技术 | 2

5 | PHP | 4

6 | Java | 4

从表结构可以看出,parentId=0的记录为顶级分类,下属parentId不为0的分类是子级分类。

接下来就是使用MySQL进行无限极分类查询了,MySQL提供了一个特殊的关键字:self joins,也就是自连接,可以让表自引用它本身字段,如以上分类表可以使用下面的SQL语句来查询所有的子级分类:

“`sql

SELECT c1.id, c1.name

FROM category as c1,category as c2

WHERE c1.parentId = c2.id


作为分类查询的终极技巧,可以使用一个递归函数,这将极大提高查询性能,把目标分类放到函数中,然后它就可以自动递归查找出所有的子级分类。例如利用MySQL自带的存储过程和函数,可以编写出一个递归函数来查询某个分类的子级分类:

```SQL
CREATE PROCEDURE getChildCategorys(in parent_id int, out child_ids text)
BEGIN
declare child_id int default 0;
declare child_ = "";
declare done int;
declare c cursor for
select id from category where parentId = parent_id;
declare continue handler for not found set done = 1;
open c;
repeat
fetch c into child_id;
if not done then
set child_= concat(child_, ",", child_id);
call getChildCategorys(child_id, @tmp);
set child_ = concat(child_, @tmp);
end if;
until done end repeat;
close c;
set child_ids = child_;
END

最后,需要将上面的递归函数调用:

“`SQL

call getChildCategorys(2, @ids);

select @ids;


以上就是MySQL无限极分类的实现与技巧,使用MySQL的特有的关键字和函数可以使我们实现更高效的查询,有助于我们搭建出天然能支持无限极分类的数据结构。

数据运维技术 » MySQL无限极分类实现与技巧(mysql无限极分类)