php, как реализовать систему сообществ и подписок
Сижу и ломаю головку над логикой реализации системы подписок на сайте
У меня есть БД user, community
Я хочу сделать чтобы пользователь имел возможность подписаться на сообщество
Для этого создал связную таблицу sub_community, где храню ID пользователя и ID community на какое он подписался
Далее на странице я вывожу полный список community и различные кнопки такие как "подписаться/отписаться"
Значит для вывода данных мне нужно:
1 Получить community(все) (LIMIT 10), далее идет пагинация
Получить на что подписан пользователь с таблицы sub_community и проверкой проверять если подписан - отписаться, если не подписан - подписаться
Получить количество подписок на сообщество с помощью count
Но если я вывожу на страницу сразу 10 сообществ, у меня делает 10 запросов в БД для получения количества подписок на сообщество
Это уже 13 запросов в БД, как возможно это оптимизировать?
Фреймворк который я использую yii2
Ответы (1 шт):
Да нет. Почему? Логика-то правильная, Вы только про количество подписок не до конца дописали условие. Надо было просто group by добавить.
Что надо:
- Получить все сообщества.
- Получить одним запросом количество подписок
SELECT COUNT(id_community), id_community FROM sub_community GROUP BY id_community. Это вернёт для каждой группы количество подписок на них. - Получить подписки пользователя на группы.
- Пробежаться по полученным массивам, и вывести всё с нужными условиями.
Более конкретно без кода сказать сложно.