Как выбрать пользователя с большим количеством условий

У меня есть модель базы данных, которая хранит пользователя в группах и для каждой группы есть другие права. Структура показана на изображении.

Как выглядит стол

Я хочу сделать SELECT запрос, который возвращает пользователя (ей), которые имеют одно или несколько прав.

Я использую Medoo

public function selUserByRight($rightID)
{

return $this->db->select(
"Users",
[
"[>]GroupRight" => ["FK_Group" => "FK_Group"],
"[>]Rights" => ["GroupRight.FK_Right" => "ID"]
],
[
"Users.ID","Users.Name","Rights.ID(RightID)","Rights.Right"],
[
"AND" =>
[
"Rights.ID" => $rightID
]
]
);
}

Использование:

$result = $db->selUserByRight(1,2,3);

Необработанный запрос:

SELECT "Users"."ID","Users"."Name","Rights"."ID"AS "RightID","Rights"."Right"FROM "Users"LEFT JOIN "GroupRight" ON "Users"."FK_Group" = "GroupRight"."FK_Group"LEFT JOIN "Right" ON "GroupRight"."FK_Right" = "Rights"."ID"WHERE "Rights"."ID = 1

Проблема в том, что запрос возвращает всех пользователей, но я хочу вернуть только user1 (потому что только этот пользователь имеет все права пользователя).

Есть ли решение?

2

Решение

Я думаю, что вы можете попробовать следующее:

SELECT dd.ID, dd.Name, dd.FK_Group, _aa.total_rights
FROM (
SELECT aa.ID, COUNT(*) AS total_rights
FROM Users AS aa
INNER JOIN Groups AS bb
ON aa.FK_Group = bb.ID
INNER JOIN GroupRight AS cc
ON bb.ID = cc.FK_Group
GROUP BY aa.ID
HAVING COUNT(*) > 0
) AS _aa
INNER JOIN Users AS dd
ON dd.ID = _aa.ID
ORDER BY _aa.total_rights;
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]