2013-06-05 3 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

Try с:

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 
Смежные вопросы