2015-11-12 13 views
2

我有一個數據庫模型,它將用戶存儲在組中,併爲每個組存儲其他權限。結構顯示在圖像上。如何選擇具有更多條件的用戶

How tables looks

我想打一個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 (因爲只有這個用戶擁有所有權利)。

有沒有解決方法?

+0

如果你可以在一個SQL小提琴給我們提供您的表結構和一些樣本數據。 –

+0

有什麼好運氣? –

回答

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;