[Résolu] PB requete SQL 3 tables + 2 count

Nouveau WRInaute
Bonjour Tout le monde.

Je n'arrive pas à construire une requête sql qui interroge plusieurs tables et qui fait 2 counts.

JE vous explique le contexte, j'ai une table qui contient des nom de logiciels, une autre table avec des utilisateurs et une autre table avec des images.

Je veux afficher la liste des logiciels mais avec le nombre de personne qui utilise chaque logiciel et le nombre d'image qui ont été faite avec chaque logiciel.

Exemple : photoshop -> 10 utilisateur et 53 images.

J'arrive bien à faire une requête pour savoir combien j'ai d'utilisateur par logiciel :
SELECT l.*, count(c.id_client) as nb_clients FROM logiciels as l, competences as c WHERE l.id_logiciel=c.id_logiciel GROUP BY l.id_logiciel ORDER BY nb_clients DESC

J'arrive bien a faire une requette pour savoir combien d'images ont été faite avec chaque logiciel :
SELECT l.*, count(tl.id_travail) as nb_travaux FROM logiciels as l, travaux_to_logiciels as tl WHERE l.id_logiciel = tl.id_logiciel GROUP BY l.id_logiciel ORDER BY nb_travaux DESC

Mais je n'arrive pas a mixer les 2 requêtes ensemble pour avoir dans la même requête, pour chaque logiciel , son nombre d'utilisateur et le nombre d'image.

Pourriez vous m'aider à finaliser cette requête.

Merci d'avance et bonne journée à tous
 
WRInaute impliqué
Re: PB requete SQL 3 tables + 2 count

Sans garantie, essaye ceci :
Code:
SELECT l.*, count(c.id_client) as nb_clients, count(tl.id_travail) as nb_travaux 
FROM logiciels l
LEFT JOIN competences c
  ON l.id_logiciel=c.id_logiciel 
LEFT JOIN travaux_to_logiciels tl 
  ON l.id_logiciel = tl.id_logiciel 
GROUP BY l.id_logiciel 
ORDER BY nb_clients DESC, nb_travaux DESC
 
Nouveau WRInaute
Re: PB requete SQL 3 tables + 2 count

Bonjour et merci de te pencher sur mon problème.

Ta requête ne génère pas d'erreur mais les résultats sont incorrects.

pour photoshop par exemple je devrai avoir comme résultat : 8 utilisateurs et 20 images mais avec ta requête j'obtiens 160 utilisateurs et 160 images.
 
WRInaute accro
Re: PB requete SQL 3 tables + 2 count

Je dirais:

Code:
select l.*,u.nb,i.nb FROM logiciels l LEFT JOIN (SELECT c.id_logiciel,count(*) AS nb FROM competences c GROUP BY 1) u ON u.id_logiciel=l.id_logiciel LEFT JOIN (SELECT tl.id_logiciel,count(*) AS nb FROM travaux_to_logiciels tl GROUP BY 1) i ON i.id_logiciel=l.id_logiciel

Pas testé, et comme d'habitude, il risque d'y avoir des problèmes avec les limitations de diverses versions de mysql sur les sous-requêtes...

Jacques.
 
Nouveau WRInaute
Re: PB requete SQL 3 tables + 2 count

Merci Jacques, ta requête fonctionne très bien.

Quelles seraient d'après toi les limitations dont tu parles ? j'utilise Mysql en version 5.0.51a.

Merci et bonne journée.
 
WRInaute accro
Si ça marche alors pas de souci... Il y a certaines constructions avec des sous-requêtes qui ne passent pas dans certaines versions de mysql, c'est tout (et comme moi j'utilise postgresql et pas mysql, je ne les connais pas par coeur).

Jacques.
 
Discussions similaires
Haut