MySQL 無限層級資料表設計

2021-09-24 09:45:56 字數 1916 閱讀 9312

需求:

使用者a介紹b入會,b成為a的下線,b再發展c、d等下線,c、d也允許發展下線,不限制層級,但是每個人只允許有乙個上線;

類似「傳銷」;

典型的樹結構;

問題:

快速查詢某人的所有上線;

快速查詢某人的所有下線;

快速為某人增加乙個下線;

方案有以下四種,各自的定義和利弊請看:前輩的文件

一、鄰接表:依賴父節點

二、路徑列舉

三、巢狀集

四、閉包錶

現在,只針對 「閉包錶」 設計,實現以上需求

-- 會員資訊表

-- level 字段說明:相對於第乙個使用者的等級。

-- 譬如:使用者a介紹b入會,b成為a的下線,由此使用者a的等級是1,使用者b的等級是2

create table if not exists `members` (

`id` int(10) unsigned not null auto_increment comment 'id',

`uid` int(10) unsigned not null default '0' comment '使用者id',

`level` int(10) unsigned not null default '0' comment '會員等級',

`add_time` int(10) unsigned not null default '0' comment '建立時間',

primary key (`id`),

key `uid` (`uid`)

) engine=innodb default charset=utf8 comment='會員資訊表';

-- 會員級別關聯表

create table if not exists `member_relation` (

`uid` int(10) unsigned not null default '0' comment '使用者id',

`puid` int(10) unsigned not null default '0' comment '階梯等級上的使用者id',

unique key `uid` (`uid`,`puid`),

key `uid_2` (`uid`),

key `puid` (`puid`)

) engine=innodb default charset=utf8 comment='會員級別關聯表';

需求分析

-- 快速查詢某人的所有上線:

select * from members where uid in (select puid from member_relation where uid = '使用者id');

-- 快速查詢某人的所有下線:

select * from members where uid in (select uid from member_relation where puid = '使用者id');

-- 快速為某人增加乙個下線:

insert into `members`(`uid`, `level`, `add_time`) values ('使用者id', '上級使用者等級+1', unix_timestamp());

insert into `member_relation`(`uid`, `puid`) select '使用者id' as uid,puid from member_relation where uid = '上級使用者id';

insert into `member_relation`(`uid`, `puid`) values ('使用者id', '上級使用者id');

無限層級mysql資料表結構

無限層級mysql資料表結構 建立表 auto generated definition create table target resource id int not null primary key,resource id int null,resource team id int null 建...

C 不用遞迴,獲取無限層級資料

物件屬性 public class reslist public listchild null public int parent public int rank 資料就是那種有父級id的那種 1 listreslist new list 新的資料 2 listalllist new list 原始...

SQL Server 儲存層級資料實現無限級分類

sql server 儲存層級資料實現無限級分類 由於資料庫儲存的資料都是以平面方式儲存,所以目前大部分論壇和其他程式都是用遞迴來展現層次資料的,如果分類的層次十分深的話那麼使用的遞迴次數相當可觀,對效能的影響也非常大。最近要做乙個分類資訊的平台就遇到這個問題了,那麼如何實現快速的展現分層資料呢?m...