2017-05-18 10 views
-1
MySQL: How to count rows when multiple joined tables ?? 

+Query: 

    SELECT p.role FROM users u 
    INNER JOIN roles r ON r.id=u.role 
    INNER JOIN permissions p ON p.role=r.id 
    WHERE p.p_id=19 AND p.p_update=1 AND r.active=1 
    GROUP BY p.role 

+Result: 

    ________ 
    |p_role:| 
    |_______| 
    | 1 | 
    | 4 | 
    |_______| 

When I add COUNT() function to p.role: 

+Query: 

    SELECT COUNT(p.role) FROM users u 
    INNER JOIN roles r ON r.id=u.role 
    INNER JOIN permissions p ON p.role=r.id 
    WHERE p.p_id=19 AND p.p_update=1 AND r.active=1 
    GROUP BY p.role 

+Result: 

    _______________ 
    |COUNT(p_role):| 
    |______________| 
    |  5  | 
    |  1  | 
    |______________| 

Why I see 2 records I already use COUNT() function?? 
I don't want to see result like this. 
I want to count rows of query above. 

I want to see result like this: 

    _______________ 
    |COUNT(p_role):| 
    |______________| 
    |  2  | 
    |______________| 

Please anyone help me. Thanks in advance! 
Sorry for my broken English. 
+0

結果は? –

+0

それは働いた。ユーザーからのSELECT COUNT(DISTINCT(p.role))u INNER JOINロールr ON r.id = u.role INNER JOIN権限p ON p.role = r.id WHERE p.p_id = 19 AND p.p_update = 1 AND r.active = 1; –

答えて

0

GROUP BY句のため、クエリではp.roleの値を返します。それは明確なp.role値のカウントを返すようにクエリが一つの値を返すようにしたい場合は、あなたがところで、例えば:

SELECT COUNT(DISTINCT(p.role)) FROM users u 
INNER JOIN roles r ON r.id=u.role 
INNER JOIN permissions p ON p.role=r.id 
WHERE p.p_id=19 AND p.p_update=1 AND r.active=1; 

GROUP BYを削除することができ、私は、クエリにDISTINCTを追加しました。レコード数のみを使用する場合は、DISTINCTを削除できます。

+0

うわー、素晴らしい!ありがとう、今それは働いた。 –

関連する問題