2

ユーザーをグループに格納し、各グループには他の権限があるデータベースモデルがあります。構造は画像に示されています。

テーブルの外観

SELECT1 つ以上の権限を持つユーザーを返すクエリを作成したいと考えています。

私は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 のみを返したい (このユーザーだけがすべての必要な権限を持っているため)。

解決策はありますか?

4

1 に答える 1

1

以下をお試しいただければと思います。

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;
于 2015-11-12T15:42:26.707 に答える