(Résolu par une jointure)[MYSQL] Dissocier ma requête ?

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics


Chacho
WRInaute discret
WRInaute discret
 
Messages: 64
Inscription: Dim Sep 16, 2007 18:42

(Résolu par une jointure)[MYSQL] Dissocier ma requête ?

Message le Lun Juin 16, 2008 22:13

Salut,

en fait j'ai un pb de requête MYSQL :)

J'ai deux tables :
- table voitures
- table soumissions

Je chercher à afficher une tableau tout con qui contient :
- Le nombre de fois qu'un modèle appararait ds la table soumissions ( ex : 5 Clio, 3 Ferrari )
- Le modèle ( Clio, Ferrari etc )
- 0 si la voiture n'est pas déja ds la table voitures ou sinon le nombre de fois qu'elle est présente dans la bdd en prenant le champs nb de ce modèle dans la table voitures

J'en suis rendu à ce code :

Code: Tout sélectionner
SELECT
   s.modèle,
   COUNT(s.modèle) AS nb_new,
   CASE WHEN s.modèle = v.modèle THEN v.nb ELSE 0 END AS nb
FROM
   voitures v, soumissions s
GROUP BY
   s.modèle


Ce code marche presque parfaitement sauf que le nb_new est faux ! Ca me renvoie des nombres qui n'ont rien à voir.. Je crois que ça part en live parce que j'ai indiqué 2 tables dans le FROM et que pour une raison le COUNT s'embrouille.

Qqun sait comment je pourrais faire ? Merci :)
Dernière édition par Chacho le Mar Juin 17, 2008 13:48, édité 1 fois.


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3062
Inscription: Jeu Sep 14, 2006 4:53

Message le Lun Juin 16, 2008 22:57

Salut,

Il faut peut-être faire une jointure entre les deux tables pour éviter le produit cartésien ?


magicaxe
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 151
Inscription: Lun Oct 18, 2004 19:00

Message le Mar Juin 17, 2008 11:57

Dans ton cas - et si j'ai bien compris le problème - tu est obligé d'utiliser une jointure externe (car des modèle peuvent exister dans la table soumission mais pas dans la table voiture). Dans ce cas, le code SQL est le suivant:

Code: Tout sélectionner
SELECT
   s.modèle,
   COUNT(s.modèle) AS nb_new,
   CASE WHEN v.modèle IS NULL THEN 0 ELSE v.nb END AS nb
FROM
   soumissions s
RIGHT JOIN voiture v ON v.modèle = s.modèle
GROUP BY
   s.modèle


Chacho
WRInaute discret
WRInaute discret
 
Messages: 64
Inscription: Dim Sep 16, 2007 18:42

Message le Mar Juin 17, 2008 13:18

Merci magicaxe tu as bien compris le pb :)

Ta proposition s'approche du résultat souhaité mais ce n'est pas encore ça :)

Si dans ma table soumissions, j'ai :
2 fois le modèle Clio qui n'existe pas dans voitures ;
1 fois le modèle Twingo qui existe déja 6 fois dans voitures ;

j'obtiens ceci :

Code: Tout sélectionner
modèle           nb_new      nb
NULL             0             1
Twingo           1            6


Donc bon pour la ligne Twingo mais faux pour les 2 soumissions de Clio !
J'ai changé ainsi :

Code: Tout sélectionner
SELECT
   s.modèle,
   COUNT(s.modèle) AS nb_new,
   CASE WHEN [b]s[/b].modèle IS NULL THEN 0 ELSE v.nb END AS nb
FROM
   soumissions s
RIGHT JOIN voiture v ON v.modèle = s.modèle
GROUP BY
   s.modèle


et c'est un peu mieux :

Code: Tout sélectionner
modèle    nb_new    nb
NULL      0        0
Twingo    1       6


mais c'est pas tout à fait ça :S


Chacho
WRInaute discret
WRInaute discret
 
Messages: 64
Inscription: Dim Sep 16, 2007 18:42

Message le Mar Juin 17, 2008 13:45

J'ai remplacé RIGHT par LEFT et ça marche :) Je comprends pas trop les JOIN mais bon ça marche ! Merci bien :)

Code: Tout sélectionner
SELECT
   s.modèle,
   COUNT(s.modèle) AS nb_new,
   CASE WHEN v.modèle IS NULL THEN 0 ELSE v.nb END AS nb
FROM
   soumissions s
LEFT JOIN voiture v ON v.modèle = s.modèle
GROUP BY
   s.modèle


magicaxe
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 151
Inscription: Lun Oct 18, 2004 19:00

Message le Mar Juin 17, 2008 17:06

Oui, excuses-moi, j'en arrive à confondre ma droite et ma gauche ... c'est grave quand même :lol:

Content que ça marche :wink:


Formation recommandée sur ce thème :

Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par Julien Coquet, expert certifié officiellement par Google Analytics.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité