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

rhesus_plw
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 3
Inscription: 25 Jan 2010

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

Message le Lun Jan 25, 2010 13:22

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
Dernière édition par rhesus_plw le Lun Jan 25, 2010 15:21, édité 1 fois.


seebz
WRInaute impliqué
WRInaute impliqué
 
Messages: 808
Inscription: 15 Avr 2007

Re: PB requete SQL 3 tables + 2 count

Message le Lun Jan 25, 2010 13:28

Sans garantie, essaye ceci :
Code: Tout sélectionner
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

rhesus_plw
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 3
Inscription: 25 Jan 2010

Re: PB requete SQL 3 tables + 2 count

Message le Lun Jan 25, 2010 13:38

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.

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2687
Inscription: 13 Fév 2004

Re: PB requete SQL 3 tables + 2 count

Message le Lun Jan 25, 2010 14:40

Je dirais:

Code: Tout sélectionner
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.

rhesus_plw
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 3
Inscription: 25 Jan 2010

Re: PB requete SQL 3 tables + 2 count

Message le Lun Jan 25, 2010 15:21

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.

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2687
Inscription: 13 Fév 2004

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

Message le Lun Jan 25, 2010 16:29

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.


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités