无限分类:MySQL 查询实现(mysql无限分类查询)

无限分类是一种灵活的用于组织、按照多级层次结构来储存数据的技术,可以应用于类目、文章列表等多种场景。本文重点介绍如何使用MySQL来实现无限分类,以及针对无限分类的查询。

实现无限分类有两种常用方案,其中第一种是使用Adjacency List Model,即关联列表模型,用两列来存储分类信息,分别代表父ID和分类ID。第二种是使用Nested Set Model,即嵌套集模型,需要使用三列来存储分类信息,分别为父ID、左值和右值。

以下是关联列表模型的MySQL结构和查询实现:

“`sql

CREATE TABLE IF NOT EXISTS node (

id INT AUTO_INCREMENT,

pid INT DEFAULT 0,

node_name VARCHAR(50) NOT NULL,

PRIMARY KEY ( id )

);

INSERT INTO node (pid, node_name) VALUES (0, ‘Parent Node 0’);

INSERT INTO node (pid, node_name) VALUES (1, ‘Child Node 0’);

INSERT INTO node (pid, node_name) VALUES (1, ‘Child Node 1’);

INSERT INTO node (pid, node_name) VALUES (2, ‘Grand Child Node 0’);

— 查询顶级类

SELECT * FROM node WHERE pid=0;

— 查询二级子类

SELECT * FROM node WHERE pid=1;

— 查询所有子类

SELECT * FROM node WHERE pid > 0;

— 查询子类和孙子类

SELECT * FROM node WHERE pid > 0 OR pid IN (SELECT id FROM node WHERE pid > 0);


实现嵌套集模型的MySQL结构和查询实现如下:

```sql
CREATE TABLE IF NOT EXISTS node (
id INT AUTO_INCREMENT,
pid INT DEFAULT 0,
lft INT,
rgt INT,
node_name VARCHAR(50) NOT NULL,
PRIMARY KEY ( id )
);
-- 手动设置左右值,跟Adjacency List Model的实现类似
INSERT INTO node (pid, lft, rgt, node_name) VALUES (0, 1, 8, 'Root Node 0');
INSERT INTO node (pid, lft, rgt, node_name) VALUES (1, 2, 5, 'Parent Node 0');
INSERT INTO node (pid, lft, rgt, node_name) VALUES (2, 3, 4, 'Child Node 0');
INSERT INTO node (pid, lft, rgt, node_name) VALUES (3, 6, 7, 'Grand Child Node 0');
-- 查询顶级类
SELECT * FROM node WHERE lft=1;
-- 查询二级子类
SELECT * FROM node WHERE lft > 1 AND lft
-- 查询所有子孙类
SELECT * FROM node WHERE lft > 1;

在查询期间,同时支持关联列表模型和嵌套集模型对无限分类的查询,但推荐使用嵌套集模型,因为它的查询接口更加简洁,可以同步实现查找和求节点个数的功能。

总之,通过 MySQL,使用关联列表模型和嵌套集模型,我们可以实现无限分类的储存和查询功能,进一步满足应用的各种业务需求。


数据运维技术 » 无限分类:MySQL 查询实现(mysql无限分类查询)