2013-06-05 46 views
-1

我有一个网站的部分应该只能被某些用户访问。我正在考虑访问控制的这个表结构。有没有其他更好的表现方式?如何使用通过连接连接的表中的访问数据?

**Users** 
id | Name | age 
39 | Peter | 24 
40 | Alan | 15 


**Sections** 
id | Name | description 
1  | Games | flash games 
2  | Bank | bank access 


**AccessControl** 
id | user_id | section_id 
1 |  39  | 1 
2 |  39  | 2 
3 |  40  | 1 

SELECT将如何获得Peter(id:39)的所有部分都可以访问?

谢谢

回答

1

试试这个:

SELECT * FROM Sections where section_id in (SELECT section_id from AccessControl where user_id=39) 
0

关于尝试如何:

select s.* from Users u, Sections s, AccessControl ac where 
u.id = 39 and 
u.id = ac.user_id and 
ac.section_id = s.id 
0

关于第一个问题;堆栈溢出不是正确的地方。它更适合于Database Administrators。关于第二个问题:

SELECT s.name, s.description, u.name 
FROM Sections s, Users u 
INNER JOIN AccessControl ac 
    ON (ac.user_id = u.id 
     AND ac.section_id = s.id) 
WHERE u.id = 39 
0

尝试:

SELECT * 
FROM Sections 
JOIN AccessControl ON Sections.id = AccessControl.section_id 
JOIN Users ON Users.id = AccessControl.user_id 
WHERE Users.id = 39 
0
SELECT * 
FROM access_control 
JOIN sections ON sections.id = access_control.section_id 
WHERE access_control.user_id =39