У меня есть база данных MySQL 5.7. ПОЛЬЗОВАТЕЛЬ может ПОДПИСАТЬСЯ на КАНАЛ, который содержит МЕСТА. Итак, есть схема БД:
channels (TABLE)
id INT UNSIGNED(10)
name VARCHAR(256)
places (TABLE)
id INT UNSIGNED(10)
name VARCHAR(256)
channelId INT UNSIGNED(10)
subscriptions (TABLE)
id INT UNSIGNED(10)
name VARCHAR(256)
userId INT UNSIGNED(10)
channelId INT UNSIGNED(10)
users (TABLE)
id INT UNSIGNED(10)
name VARCHAR(256)
У меня есть API для получения информации о месте. Пользователь спрашивает свои учетные данные для placeId, я проверяю его учетные данные.
Тогда я получаю идентификатор канала
SELECT channelId FROM places WHERE id = *inputId*;
Наконец, с помощью userId я проверяю, подписан ли он на канал
SELECT * FROM subscriptions WHERE channelId = *channelId* AND userId = *userId*;
Я получил идентификатор канала по предыдущему запросу и идентификатор пользователя по первому, когда я проверял его учетные данные. В конце делает 3 запроса, 3 выбирают.
Есть ли другой эффективный способ сделать это? Я не очень разбираюсь в JOIN, но если это может сделать систему более эффективной, то, пожалуйста, помогите мне.