|
|
|
| привет всем !
помогите - делаю форум, блог или что-то в этом роде
tabl1- темы блога
(1, тема для Коли)
(2,тема для Оли)
(3,тема для всех)
(4,тема ни для кого)
tabl2 - персональный доступ (первая колонка -id из первой таблицы(номер темы) , вторая колонка- имя пользователя, которому разрешено читать эту тему (в боевом варианте будет id пользователя, так написал чтобы облегчить понимание связей))
(2,ОЛЯ)
(1,КОЛЯ)
tabl3 публичный доступ (номера тем из первой таблицы для публичного доступа
(3)
в результате запроса должны быть все 4 строки, но в завсисимости от имени юзера должно быть отличие "предназначенных" для него строк (в колонке стоять к примеру его имя, 1 или еще чтонить) исходя из чего я буду создавать линки на этих строках
зашел КОЛЯ ($_SESSION['user_name']='КОЛЯ')
1, тема для Коли,КОЛЯ
2,тема для Оли,
3,тема для всех,КОЛЯ
4,тема ни для кого
зашла ОЛЯ
1, тема для Коли,
2,тема для Оли,ОЛЯ
3,тема для всех,ОЛЯ
4,тема ни для кого
не слишком путанно объяснил ? Спасибо всем ! | |
|
|
|
|
|
|
|
для: larush
(20.08.2008 в 19:27)
| | themes(id_theme, theme_name, public)
access(theme_id, user_id)
SELECT themes.*, COALESCE(access.user_id, public-1, -1) AS acsid
FROM themes
LEFT JOIN access ON themes.id_theme = access.theme_id
AND access.user_id = $login_id
|
Третья таблица намеренно минимизирована до поля public в первой, поскольку таболица с одним полем - нонсенс. Таблица описывать сущность. А факт открытого для всех доступа - свойство.
Если персонального доступа к таблице нет, но есть публичный, на выходе 0, если нет никакого, то -1 .
подставить вместо нуля $login_id в нужном месте - задача php-уровня . По-моему так более логично. | |
|
|
|