Пытаюсь сделать это с помощью одного запроса, но хочу получить список всех пользователей, у которых есть разрешение на x. Это включает в себя таблицу пользователей и таблицу разрешений. Но, похоже, что любые соединения, которые я использую, не заботятся об операторе where (поскольку у пользователя обычно есть другое разрешение в таблице)
SELECT DISTINCT `u`.*
FROM (`system_users` AS u)
JOIN `system_user_permissions` AS p ON `u`.`id` = `p`.`user`
WHERE `p`.`permission` != 2
AND `p`.`permission` != 3
У меня около 3900 пользователей, я должен получить около 2000 пользователей, которые не привязаны ни к идентификатору разрешения 2, ни к 3. Но все равно получают 3900. Проблема в том, что пользователь также может быть привязан к разрешению 1,5,6 .. . они все еще помещаются в список после того, как он группирует их.
Есть предложения?
Обновленный запрос, но все равно не повезло. Если я выдаю «разрешение» для каждого из них, я не получаю 2 или 3, перечисленные пользователи все еще могут иметь это разрешение там
SELECT DISTINCT `u`.*, `p`.`permission`
FROM (`system_users` AS u)
INNER JOIN `system_user_permissions` AS p ON `u`.`id` = `p`.`user`
WHERE `p`.`permission` NOT IN (2, 3)
Это помогло:
SELECT * FROM system_users AS u
WHERE NOT EXISTS(
SELECT 1 FROM system_user_permissions AS p
WHERE u.id = p.user
AND p.permission IN (2,3)
)