Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/06/2011, 00h01   #1
Membre habitué
 
Avatar de PoZZyX
 
Inscription : août 2005
Messages : 419
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 419
Points : 129
Points : 129
Par défaut Problème de Count multi tables

Bonsoir tout le monde,

J'ai un petit problème de rédaction de requête SQL et je trouve pas la solution, ça serait sympa si quelqu'un pouvait m'aider .

Mon schéma est en pièce joint au message.

En gros, j'aimerais obtenir (en une seule requête) une liste des catégories de permissions (id et nom de la catégorie) avec le nombre d'applications qui ont au moins une permission dans cette catégorie.

Disons les permission P1, P2, P3, P4 et les catégories C1, C2.
P1,P2 ==> C1
P3,P4 ==> C2

L'application A1 utilise P1, P2, P3, P4
L'application A2 utilise P1, P2
L'application A3 utilise P1

J'aimerais avoir comme résultat :
Catégorie C1, 3 applications
Catégorie C2, 1 application

J'en suis arrivé à la requête suivante :
Code :
1
2
3
4
5
6
 
SELECT id AS _id, category.name || ' (' || Count(application) || ')' AS name 
FROM category 
LEFT OUTER JOIN relation_category_permission ON category.id = relation_category_permission.category 
INNER JOIN relation_application_permission ON relation_category_permission.permission = relation_application_permission.permission 
GROUP BY category.id;
Alors ça m'affiche bien chaque catégorie mais la quantité d'application est complètement fausse.

Une idée de correction ?

Merci d'avance et bonne soirée !!!

PoZZyX
Images attachées
Type de fichier : png db.png (30,1 Ko, 5 affichages)
PoZZyX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2011, 07h51   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
bonjour,

Rajoutez un distinct dans votre count.

Code :
1
2
3
4
5
6
 
SELECT id AS _id, category.name || ' (' || Count(DISTINCT application) || ')' AS name 
FROM category 
LEFT OUTER JOIN relation_category_permission ON category.id = relation_category_permission.category 
INNER JOIN relation_application_permission ON relation_category_permission.permission = relation_application_permission.permission 
GROUP BY category.id;

Ensuite votre left outer join va être transformé en inner join car vous avez un inner join qui s'effectue sur votre table relation_category_permission.

Mais au vue de votre demande initiale :
Citation:
En gros, j'aimerais obtenir (en une seule requête) une liste des catégories de permissions (id et nom de la catégorie) avec le nombre d'applications qui ont au moins une permission dans cette catégorie.
je transformerai tout ca en :
Code :
1
2
3
4
5
6
 
SELECT id AS _id, category.name || ' (' || Count(DISTINCT application) || ')' AS name 
FROM category 
INNER JOIN relation_category_permission ON category.id = relation_category_permission.category 
INNER JOIN relation_application_permission ON relation_category_permission.permission = relation_application_permission.permission 
GROUP BY category.id;
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2011, 07h53   #3
Membre habitué
 
Avatar de PoZZyX
 
Inscription : août 2005
Messages : 419
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 419
Points : 129
Points : 129
Merci, je venais de trouver j'étais en train de venir poster

Merci et bonne journée
PoZZyX est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h43.


 
 
 
 
Partenaires

Hébergement Web