我有一个用户表.. 用户可以有许多子用户..每个子用户可以有一个 子用户数。
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 :(得分:2)
如果只有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随意发表评论,如果您希望我发布此额外信息(但请先尝试自己:) :)
祝你好运!
答案 1 :(得分:0)
你可以这样做:
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)