Итак, в базе данных есть таблица с именем role_users. Это содержит все роли, которые есть у пользователей. Здесь есть два столбца: user_id, role_id.SQL: где НЕ IN запрос
Обычный пользователь, без дополнительных ролей, имеет 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, 2 и ROLE_ID ROLE_ID 3.
Партнер 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 и thats it.
Так как я могу это сделать правильно? Поэтому, когда он ухаживает член, он также должен убедиться, что user_id не имеет больше строк с другими role_ids как 2,3,4
Попробуйте выбрать отдельный user_Id – Sparky
Реляционный оператор, который вам нужен, это [раздел] (http://en.wikipedia.org/wiki/Relational_algebra#Division_.28.C3.B7.29), широко известный как ["поставщик который поставляет все детали »] (http://www.dbdebunk.com/page/page/772076.htm). Предлагаемое чтение [здесь] (http://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the-sql-of-relational-division/), [здесь] (http: //www.dbdebunk.com/page/page/772076.htm) и [здесь] (http://www.cs.arizona.edu/~mccann/research/divpresentation.pdf). – onedaywhen