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

Discussion dans 'Administration d'un site Web' créé par Chacho, 16 Juin 2008.

  1. Chacho
    Chacho WRInaute discret
    Inscrit:
    16 Septembre 2007
    Messages:
    72
    J'aime reçus:
    0
    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:
    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 :)
     
  2. YoyoS
    YoyoS WRInaute accro
    Inscrit:
    14 Septembre 2006
    Messages:
    3 226
    J'aime reçus:
    0
    Salut,

    Il faut peut-être faire une jointure entre les deux tables pour éviter le produit cartésien ?
     
  3. magicaxe
    magicaxe WRInaute discret
    Inscrit:
    18 Octobre 2004
    Messages:
    129
    J'aime reçus:
    0
    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:
    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 
     
  4. Chacho
    Chacho WRInaute discret
    Inscrit:
    16 Septembre 2007
    Messages:
    72
    J'aime reçus:
    0
    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:
    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:
    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:
    modèle 	nb_new 	nb
    NULL 	  0 	    0
    Twingo	 1 	   6
    mais c'est pas tout à fait ça :S
     
  5. Chacho
    Chacho WRInaute discret
    Inscrit:
    16 Septembre 2007
    Messages:
    72
    J'aime reçus:
    0
    J'ai remplacé RIGHT par LEFT et ça marche :) Je comprends pas trop les JOIN mais bon ça marche ! Merci bien :)

    Code:
    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
     
  6. magicaxe
    magicaxe WRInaute discret
    Inscrit:
    18 Octobre 2004
    Messages:
    129
    J'aime reçus:
    0
    Oui, excuses-moi, j'en arrive à confondre ma droite et ma gauche ... c'est grave quand même :lol:

    Content que ça marche :wink:
     
Chargement...
Similar Threads - (Résolu jointure)[MYSQL] Dissocier Forum Date
(resolu) Y a t il un controle sur les annonces mises en ligne par les annonceurs ? AdWords 11 Septembre 2010
Erreur 404 Wordpress (Résolu) Netlinking, backlinks, liens et redirections 24 Janvier 2010
(Résolu)site devenu inconnue pour Google Crawl et indexation Google, sitemaps 19 Décembre 2008
php: Lire lignes et colonnes fichier Excel (RESOLU) Développement d'un site Web ou d'une appli mobile 6 Novembre 2008
Undefined index.... : concerne champ email (RESOLU) Développement d'un site Web ou d'une appli mobile 9 Octobre 2008
Gros probleme de session (RESOLU) MERCI à tous !!! Développement d'un site Web ou d'une appli mobile 7 Octobre 2008
Moteur de recherche interne (résolu) URL Rewriting et .htaccess 26 Juillet 2008
URL Rewriting et EasyPHP 2.0b1 (résolu) URL Rewriting et .htaccess 24 Juillet 2008
Prob url rewriting et htaccess (resolu) URL Rewriting et .htaccess 16 Juillet 2008
Pages noires sous Firefox (RÉSOLU) Demandes d'avis et de conseils sur vos sites 29 Février 2008
(résolu) phpbb et variables globales Développement d'un site Web ou d'une appli mobile 6 Juin 2007
(Resolu) Question Microsoft Excel (Lookup function) Le café de WebRankInfo 1 Juin 2007
Affiliation amazon(résolu) Développement d'un site Web ou d'une appli mobile 9 Novembre 2006
Test url rewriting fonctionne mais erreur 500 (Résolu) URL Rewriting et .htaccess 7 Octobre 2006
(résolu] erreur 500 sur test avec Spider simulator Problèmes de référencement spécifiques à vos sites 24 Mai 2006
des malins ont copiés tout mon site sans mon accord (résolu) Demandes d'avis et de conseils sur vos sites 9 Mars 2006
nouveau filtre sélectif de Gg ? (Résolu!:.. faiblesse de Gg) Problèmes de référencement spécifiques à vos sites 17 Février 2006
(résolu) [R=301] ou [R=301 L] URL Rewriting et .htaccess 22 Juillet 2005
lien entre PR et classement sur GG(RESOLU) Débuter en référencement 9 Mai 2005
rediriger http://site.com vers http://www.site.com (résolu) Débuter en référencement 13 Février 2005