Как логически собрать логику из 3 запросов в Mysql?

Всем привет! Модераторов прошу не корректировать теги, потому что вопрос относится равноценно ко всем трем.
Подскажите как правильно выстроить логику в таком случае?
У меня появилась такая проблема: перед тем как отправить пользователю push уведомление, мне нужно сделать 3 запроса в БД. Действие: "на сайт добавляется пост" (условно, для упрощения объяснения).
1. Из модели AddPostPushCreator запрашиваем ID пользователей, у которых в настройках указано, что они хотят получать уведомления из категории "Бизнес".
2. Запрос "Проверить настроены ли у каждого из этих пользователей получение пуш уведомлений по этой теме" (т.е. пользователь мог включить уведомления в приложении, но запретить пуш именно для такого типа уведомлений).
3. Запрос на получение ключа устройства, на которое нужно выслать пуш уведомление.

Проблема заключается в следующем:
2 и 3 запрос по сути одинаковы для любого типа пуш уведомлений, будь-то "кто-то написал личное сообщение", "кто-то подписался", "кто-то лайкнул" и т.д. Поэтому я исключил вариант объединения их с первым запросом. Потому что пришлось бы одинаковую локиу прописывать для каждого типа уведомлений. Поэтому, я должен получить первым запросом ID, но предположим их десятки тысяч, а значит я не могу вставить их во 2й и 3й запросы с помощью WHERE IN() потому что существует ограничение.

Прошу совета, просто хотя бы на словах, как такую ситуацию можно обыграть
  • Вопрос задан
  • 900 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Bairkoo
Не совсем я понял проблемы, и почему нельзя написать по вьюхе на каждый тип уведомлений.

Но как вариант с извращениями: Второй и третий запрос запилить во вьюху.
Четко обозначить сколько полей Вам нужно для всех 20 уведомлений.
Создать процедуру, в которой инпут - категория, тип уведомления.
Внутри написать ветвистую логику для разных уведомлений, но всегда делать запросы, которые возвращают одинаковое количество колонок. Тут используете одну вьюху, которую не надо 100500 раз дублировать в запросах.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы