Итак, в базе данных есть таблица с именем role_users.Это содержит все роли, которые имеют пользователи.Здесь есть два столбца: user_id, role_id.
Обычный пользователь без дополнительных ролей имеет 1 строку в этой таблице.Эта строка имеет значение role_id 1.
Администратор имеет 2 строки в этой таблице.Один с role_id 1 и одна строка с role_id 2
Примерно так:
user_id role_id
88 1
88 2
99 1 // Only one row with that user_id, so he's a user
Теперь я пытаюсь подсчитать, сколько пользователей / администраторов / продавцов / партнеров существует.
У продавцов есть 3 строки, одна с role_id 1, role_id 2 и role_id 3.
Partner имеет role_id 1, role_id 4
Итак, я попробовал это:
SELECT user_id FROM roles_users WHERE role_id IN (1) // MEMBERS ONLY
SELECT user_id FROM roles_users WHERE role_id IN (1,2) // ADMIN
SELECT user_id FROM roles_users WHERE role_id IN (1,2,3) // SELLER
SELECT user_id FROM roles_users WHERE role_id IN (1,4) // PARTNERS
Но эти запросы не работают должным образом.Они дают мне счет, который намного больше, чем предполагалось.И я полагаю, что это потому, что он не ИСКЛЮЧАЕТ никаких строк,
Я имею в виду запрос, когда он должен искать role_id 1, для членов, он также включает партнеров, администраторов, продавцов, потому что он только проверяет,это все с строкой role_id 1 и вот оно.
Так, как я могу сделать это правильно?Поэтому, когда он присматривает за членами, он также должен убедиться, что user_id не имеет больше строк с другими role_ids, такими как 2,3,4