2016-09-12 21 views
0

私は組織を持っています。各組織はメンバーとプロジェクトを持つことができます。 メンバーとプロジェクトの数が多い組織のリストを取得したい。 例えば、mysqlクエリで2つの異なる行をカウントします。

Organization | Members | Projects | Action 
------------------------------------------ 
Org 1  | 5  | 6  | Delete - Edit 
Org 2  | 2  | 9  | Delete - Edit 

私は、このクエリを使用しています

SELECT COUNT(m.id) as members, COUNT(p.id) as projects, 
     o.status,o.organization_name,o.logo, o.id as id 
from tbl_organizations o 
LEFT JOIN tbl_organization_members m ON (o.id = m.organization_id) 
LEFT JOIN tbl_projects p ON (o.id = p.organization_id) 
WHERE o.status= 'active' AND o.created_by= 1 

しかし、プロジェクトの数の出力は、メンバーの数に等しいです。 クエリを使用して上記のサンプルを作成するにはどうすればよいですか?

答えて

0

を数えるサブクエリによって:

SELECT 
    o.id as Organization, 
    (SELECT COUNT(*) FROM tbl_organization_members WHERE organization_id = o.id) as members, 
    (SELECT COUNT(*) FROM tbl_projects WHERE organization_id = o.id) as projects 
FROM 
    tbl_organizations o 
WHERE 
    o.status= 'active' AND o.created_by = 1 
1

グループ組織の列とあなたが一緒に関連することができます個別のIDが

SELECT o.status,o.organization_name, o.logo, o.id as id, 
     COUNT(distinct m.id) as members, COUNT(distinct p.id) as projects, 
from tbl_organizations o 
LEFT JOIN tbl_organization_members m ON (o.id = m.organization_id) 
LEFT JOIN tbl_projects p ON (o.id = p.organization_id) 
WHERE o.status= 'active' 
AND o.created_by= 1 
GROUP BY o.status, o.organization_name, o.logo, o.id 
1

この方法を試してください:あなたはJOIN

SELECT o.id as id, o.organization_name, cnt_ as members, cnt_p as projects 
from tbl_organizations o 
LEFT JOIN (
    SELECT organization_id, COUNT(id) cnt_m 
    FROM tbl_organization_members 
    GROUP BY organization_id 
) m ON (o.id = m.organization_id) 
LEFT JOIN (
    SELECT organization_id, COUNT(id) cnt_p 
    FROM tbl_projects 
    GROUP BY organization_id 
) p ON (o.id = p.organization_id) 
WHERE o.status= 'active' AND o.created_by= 1 

この方法すでにが集約されています memのバージョンber/projectテーブルを参照して、メンバー/プロジェクトの数をorganization_idごとに取得します。