IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Jointure sur 3 tables


Sujet :

Requêtes MySQL

  1. #1
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2007
    Messages : 469
    Points : 525
    Points
    525
    Par défaut Jointure sur 3 tables
    Bonjour,

    Pardon mais je scotch sur une requête...
    J'ai 3 tables :

    ma table article :
    articles: articleID | dispo (0/1)
    ma table commandes :
    commandes : comID | clientID | ...
    ma table détail commandes :
    com_det : comID | articleID | qte | pht | ...

    Je voudrais ressortir l'ID article (articleID) disponible (dispo=1) qu'un client (clientID) a le plus commandé (SUM(qte)) parmi toutes ses commandes (comID).
    Si plusieurs articles ont été commandés à quantité égale, l'ordre doit être celui du prix décroissant (ORDER BY pht DESC LIMIT 1).

    Si quelqu'un pouvait me donner un petit coup de pouce ce serait fabuleux.

    Merci

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Qu'est ce cette requête donne ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select c.clientID,a.articleID,sum(d.qte),max(a.pht)
      from commandes c
      join com_det d on c.comID = d.comID
      join article a on d.articleID = a.articleID
     where c.clientID = ?
       and a.dispo = 1
     group by c.clientID,a.articleID
     order by sum(d.qte) desc, max(a.pht) desc, a.articleID
     limit 1
    J'ai utilisé max(a.pht) pour récupérer le prix de chaque article sans faire de sous requête, à priori comme il n'y a qu'un prix par article max ou min ne devrait pas modifier le résultat, mais à confirmer.

    J'ai rajouté a.artcileID dans le tri au cas où 2 articles aient la même quantité commandée et le même prix, comme ça le résultat est déterministe, le besoin semblant être de ne remonter qu'1 seul article.

    S'il faut remonter tous les articleID concernés, alors il faudra passer par une sous requête un peu chiante à réaliser car mysql ne connaît pas rank.

  3. #3
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2007
    Messages : 469
    Points : 525
    Points
    525
    Par défaut
    Merci skuatamad.

    Mes connaissances en requêtes sont limitées au b a ba.

    ERREUR Unknown column 'a.articleID' in 'field list'
    Je remplace donc les a.articleID par articles.articleID

    etc?

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    J'ai écrit article à la place d' articles. Sinon pour les alias je trouve ça plus lisible et mysql les supporte évidemment, essaie en écrivant

  5. #5
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2007
    Messages : 469
    Points : 525
    Points
    525
    Par défaut
    Arf... non j'aurais du faire attention.

    Je colle donc la requête avec un ID client valide, x commandes mais rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $clientID='23760';
    $requete = mysql_query("SELECT c.clientID,a.articleID,sum(d.qte),max(a.pht)
      FROM commandes c
      JOIN com_det d ON c.comID = d.comID
      JOIN articles a ON d.articleID = a.articleID
     WHERE c.clientID = '$clientID'
       AND a.dispo = '1'
     GROUP BY c.clientID,a.articleID
     ORDER BY sum(d.qte) DESC, max(a.pht) DESC, a.articleID
     LIMIT 1"); 
     $articleID = mysql_result($requete,0,"a.articleID");

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Tu peux tester la requête directement dans phpmyadmin avec le bon clientID stp ?

  7. #7
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2007
    Messages : 469
    Points : 525
    Points
    525
    Par défaut
    Erf...pardon resultat NULL

    Il fallait interroger ma table factures et non commandes (dont le détail disparait après facturation)

    Un Immense Merci et un grand Bravo !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. jointure sur 3 tables
    Par jojo22222 dans le forum Requêtes
    Réponses: 5
    Dernier message: 23/01/2006, 22h47
  2. Jointure sur 3 tables
    Par tonymontana4192 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/11/2005, 13h24
  3. [MySQL] Jointure sur une table déjà jointe
    Par genova dans le forum Requêtes
    Réponses: 3
    Dernier message: 18/10/2005, 23h54
  4. jointure sur TROIS tables
    Par caribou_belle dans le forum Langage SQL
    Réponses: 8
    Dernier message: 01/03/2004, 11h20
  5. Jointure sur 2 tables de bases différentes
    Par Celina dans le forum Langage SQL
    Réponses: 10
    Dernier message: 10/11/2003, 11h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo