Можно ли уместить сложную логику в один запрос БД?
Привет!
Я в образовательных целях делаю некоторую приложеньку.
Суть - есть автор, автор пишет пост, пост можно просмотреть другим и прокомментировать.
Посмотреть и прокомментировать могут либо все, либо определенные (зарегистрированные) участники объединенные в группы.
Задача - определить - можно ли показывать\принимать комментарии от конкретного пользователя.
(приложенька работает через REST, поэтому комментарии надо проверять отдельно от самого поста)
Примерная структура БД: User
id | name | token
Post
id | text | authorID
Group
id | name | authorID
GroupUser
id | userID | groupID
PostAllowGroup
id | postID | groupID
Comment
id | text | authorID | postID
Дальше алгоритм такой:
1 получаем запрос от клиента с токеном и postID (на комменты)
2 идем в User и берем id которому соответствует токен
3 идем в PostAllowGroup и выбираем те groupID, в которых есть наш postID
4 идем в GroupUser и смотрим, есть ли поля где groupID соответствует userID из второго пункта
5 если все ок, то отдаем коммент(ы) по postID сделав JOIN c User по authorID
Можно ли всю эту логику уместить в один запрос к базе?
И будет ли это быстрее, чем делать много простых запросов?
Просто на данный момент мне ума хватает всю эту логику я реализовать цепочкой запросов (как в алгоритме)
База данных MySQL или Postgres
Спасибо!
Можно использовать вот єтот инструмент чтобы расшаривать людям свои наброски sqlfiddle.com/#!17
В Постгри большой грамотно составленный запрос работает быстрее чем много маленьких, про MySQL не скажу.