[英]Database Schema Design Suggestion Required?
我有一個用戶表。一個用戶可以有很多子用戶。每個子用戶可以有多個子用戶。
User Table.
Id UserName other...No of columns.
1 User1
2 user2
3 user1_1
4 user1_2
5 user1_2_1
6 user1_2_2
這里的User1_1是User1的子用戶,而User1_2_2是User1_2的子用戶。 這是自參考表的問題,但深度為3到4級。 我想知道誰是特定用戶的主控者或特級大師?
group Table.
Id , Owner_userId
1 , 1
2 , 4
user_groupTable
groupId , UserId
1 , 3
1 , 4
2 , 5
2 , 6
通過這個我可以實現我的目標。 我在流浪中是否有解決此問題的最佳方法? 這種方法的困難之處在於查詢可能會變得復雜。 請告訴我最好的方法,謝謝..
如果只有一個,則用戶的父母為0或1,為什么不使用以下結構
User Table.
Id UserName other...No of columns. ParentUserID
1 User1 NULL
2 user2 NULL
3 user1_1 1
4 user1_2 1
5 user1_2_1 4
6 user1_2_2 4
7 user2_1 2
這是一個非常簡單的方法,您將可以使用以下方法獲取所有頂級(大師)用戶
SELECT * FROM dbo.Users WHERE ParentID = NULL
要獲得特定用戶的父母,您將能夠做到
SELECT * FROM dbo.Users WHERE ID = *then what ever the parent user ID of the user you are looking at*
要獲得樹狀結構,可以使用遞歸CTE,如果您希望我發布此額外信息,請隨時發表評論(但請先嘗試:)
祝好運!
您可以這樣做:
CREATE TABLE users (
id int(11) NOT NULL AUTO_INCREMENT,
parent_id int(11) NOT NULL DEFAULT '0',
user_name varchar(32),
.... more columns ...
);
並在此處插入一些數據:
INSERT INTO users VALUES (1,0,'User1');
INSERT INTO users VALUES (2,0,'User2');
INSERT INTO users VALUES (3,1,'User1_1');
INSERT INTO users VALUES (4,1,'User1_2');
INSERT INTO users VALUES (5,4,'User1_2_1');...
並創建一個像這樣的函數:
CREATE FUNCTION f_get_top_user_id (xusers_id INT)
RETURNS text
DETERMINISTIC
BEGIN
DECLARE xtop_id int;
DECLARE xparent_id int;
SELECT u.parent_id INTO xparent_id FROM users u WHERE u.id = xusers_id;
SELECT u.id INTO xtop_id FROM users u WHERE u.id = xusers_id;
WHILE (xparent_id > 0) DO
BEGIN
SELECT u.id INTO xtop_id FROM users u WHERE u.id = xparent_id;
SELECT u.parent_id INTO xparent_id FROM users u WHERE u.id = xparent_id;
END;
END WHILE;
RETURN xtop_id;
END
如果您像這樣調用該函數
SELECT f_get_top_user_id(5);
它應該返回1(User1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.