У меня проблема, которую я легко решаю с помощью php и некоторых запросов, но я хотел сделать один большой запрос (по крайней мере, если он быстрее, чем, я полагаю, должен быть).
Итак, у меня есть 3 таблицы, и позвольте немного упростить их:
topic
, который имеет 3 столбца
access
, который имеет 2 столбца
friendship
, который имеет 2 столбца
Что я хочу сделать, так это если пользователь (мы называем его watch_id) пытается просмотреть эту тему. Я хочу вернуть тему, если ему разрешено смотреть, а если нет, ничего не вернуть.
Ему разрешено смотреть, если хоть что-то из этого верно :
- watch_id == user_id
- видимость == 3
- visiblity == 2 && Таблица дружбы возвращает строку, когда Friends.user_id = topic.user_id && Friends.friend_id == watch_id
- visibility == 1 && таблица доступа возвращает строку, когда access.topic_id = topic.id && access.user_id == watch_id
Как вы можете видеть, это не очень сложно сделать с php и кучей запросов, но только в sql я не могу понять это. Я пробовал соединения, дела и прочее, но логика никогда не складывается. (
Так вы, ребята, можете мне помочь? Или я застрял с php и большим количеством запросов?
Редактировать: Хм, похоже, я не очень хорошо себя прояснил, мой плохой! Ему разрешено наблюдать, если какое-либо из этих требований верно. Так как это так, я иду с ответом левого соединения, который было проще всего расширить. Спасибо всем!