需求:使用者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...