Задавайте вопросы, мы ответим
Вы не зашли.
Всем доброго времени суток!
Есть таблица topics с темами для форума. Одно из полей содержит id записи из таблицы visibility_rules, где все поля булева типа (1 означает, что пользователю данной категории тема будет видна, а 0 - не видна). Для наглядности опишу несколько полей.
таблица topics:
id,topic_title,visibility_rule_id;
таблица visibility_rules:
id,student BOOLEAN,teacher BOOLEAN.
таблица users:
id,category.
Здесь в поле category, допустим, будет либо 1 (студент), либо 2 (преподаватель).
Как на любом форуме, нужно показывать темы постранично, например, по 30 штук. Допустим, пользователь обращается к 3-ей странице. Мне нужно определить, какие темы ему показать.
Вся сложность в проверке правил видимости каждой темы для данного пользователя. На 3-ей странице для каждого пользователя буду отображены свои темы. Нужно проверить каждую тему на предмет того, должна она показываться пользователю, или нет.
Есть ли какой-то механизм, позволяющий решить эту задачу относительно просто?
Неактивен
Если пользователь студент, то список тем, видимых ему:
select t.id from topics t join visibility_rules v on t.visibility_rule_id=v.id where student=1
аналогично для преподавателя
Неактивен
vasya написал:
Если пользователь студент, то список тем, видимых ему:
select t.id from topics t join visibility_rules v on t.visibility_rule_id=v.id where student=1
аналогично для преподавателя
Спасибо огромное!
Тогда еще вопрос, задача усложняется.
В дополнение к описанной структуре:
Есть таблица user_invites, где содержится информация о том, какие пользователи приглашены в какую тему.
user_invites:
topic_id,user_id.
Ключ по (topic_id,user_id).
Нужен подобный запрос (учитывающий и предыдущие условия), который бы выбирал только те темы, которые показывать данному пользователю. Если пользователь есть в таблице user_invites для данного topic_id, то нужно показать тему для него в любом случае. Если нет, то вступает в силу предыдущий запрос.
Неактивен
Неактивен
vasya написал:
select t.id from (topics t join visibility_rules v on t.visibility_rule_id=v.id) left join user_invites u on t.id=u.topic_id where student=1 or u.user_id='id_вашего_пользователя'
Феноменально!
Добавил DISTINCT перед t.id и получилось грандиозно! Премного благодарен!
Неактивен