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 Foireuse ?


Sujet :

Requêtes MySQL

  1. #1
    Membre confirmé
    Homme Profil pro
    Programmeur
    Inscrit en
    Mai 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Mai 2012
    Messages : 55
    Par défaut Jointure Foireuse ?
    Bonjour à tous !

    Pour évité de faire rager mes profs en cours et de faire 3 boucles j'ai essayé de faire une belle requête toute belle qui est :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT F.Qte, A.Lib_Article, C.PU_1 FROM Facture F, Article A, Cndt C
    WHERE A.ID_Article = F.Code_Article
    AND  A.ID_Article = C.Code_Art

    Le problème c'est que le résultat est assez...

    Il me répète le résultat x fois le nombre d'enregistrements dans ma base.

    Des solutions pour le plus nul de la classe en sql ?

    Bonne journée

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 812
    Billets dans le blog
    14
    Par défaut
    Les jointures s'écrivent depuis 20 ans avec l'opérateur JOIN ; il serait temps de s'y mettre !
    Si ton prof de SQL t'a appris les jointures de la manière dont tu les as écrites, tu lui diras de ma part qu'il a 20 ans de retard et qu'il faut qu'il se recycle !

    Ta requête récrite correctement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT F.Qte, A.Lib_Article, C.PU_1
    FROM Article A
    INNER JOIN Facture F ON A.ID_Article = F.Code_Article
    INNER JOIN Cndt C ON A.ID_Article = C.Code_Art
    Il me répète le résultat x fois le nombre d'enregistrements dans ma base.
    Que contient la table au nom obscur "Cndt" ?
    Qu'est censée faire cette requête ?

    En l'état, elle sélectionne les articles associés à au moins une facture et à au moins un ou une "Cndt".
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre confirmé
    Homme Profil pro
    Programmeur
    Inscrit en
    Mai 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Mai 2012
    Messages : 55
    Par défaut
    Conditionnement

    Il y a 3 table :

    Article (ID, Lib,...)
    Conditionnement(ID_Artcile, Prix_Unitaire...)
    Facture (ID_Article, ID_Condtionnement, Qte)....

    Elle est censée Afficher Le lib de l'article, la qte, et le prix unitaire

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 812
    Billets dans le blog
    14
    Par défaut
    Et c'est ce qu'elle fait a priori mais si un article est facturé 18 fois, l'article apparaîtra forcément 18 fois, chaque fois avec la quantité propre à la facture.

    Pour mieux voir ce qui te semble faux, donne nous un petit jeu de données de départ, le résultat attendu et le résultat obtenu, ainsi que la structure exacte et complète des tables (résultats de SHOW CREATE TABLE la_table).
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre confirmé
    Homme Profil pro
    Programmeur
    Inscrit en
    Mai 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Mai 2012
    Messages : 55
    Par défaut
    http://awery.fr/tools/bug.png

    Désolé pour la qualité assez collégial

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 812
    Billets dans le blog
    14
    Par défaut
    Ouch !
    Une présentation en texte aurait suffit.

    Il y aurait des choses à dire sur la structure de la BDD mais ce n'est pas le sujet.

    Un article a un seul conditionnement ou peut-il en avoir plusieurs ?

    S'il n'en a qu'un, je pense que ta requête, corrigée avec la syntaxe moderne pour les jointures, est bonne.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Par défaut
    Un show create table aurait été nettement préférable, là j'ai l'impression qu'il manque des colonnes tant dans la description succinte des 3 tables que dans les captures d'écran...
    Ce ne serait pas plutôt comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT F.Qte, A.Lib_Article, C.PU_1
      FROM Article A  
      JOIN Cndt C    ON C.Code_Art = A.ID_Article
      JOIN Facture F ON F.Code_Article = A.ID_Article
                    and f.id_conditionnement = c.id_conditionnement

  8. #8
    Membre confirmé
    Homme Profil pro
    Programmeur
    Inscrit en
    Mai 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Mai 2012
    Messages : 55
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Ouch !
    Il y aurait des choses à dire sur la structure de la BDD mais ce n'est pas le sujet.
    Ouwwwi qu'il y en à, a vrais dire je pense que c'est tout le modèle conceptuel à revoir, tout l'uml, toute la gestion et une grande partie du noyau

    Mais c'est pas moi qui la fait, il m'a été donner tel-quel

    - > Un article a un seul conditionnement ou peut-il en avoir plusieurs ?
    Un article a un et un seul conditionnement



    Citation Envoyé par skuatamad Voir le message
    Un show create table aurait été nettement préférable, là j'ai l'impression qu'il manque des colonnes tant dans la description succinte des 3 tables que dans les captures d'écran...
    Ce ne serait pas plutôt comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT F.Qte, A.Lib_Article, C.PU_1
      FROM Article A  
      JOIN Cndt C    ON C.Code_Art = A.ID_Article
      JOIN Facture F ON F.Code_Article = A.ID_Article
                    and f.id_conditionnement = c.id_conditionnement
    Marche pas erreur :
    Citation Envoyé par MySql
    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given

  9. #9
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 812
    Billets dans le blog
    14
    Par défaut
    Ton erreur est une erreur PHP, pas MySQL.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  10. #10
    Membre confirmé
    Homme Profil pro
    Programmeur
    Inscrit en
    Mai 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Mai 2012
    Messages : 55
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Ton erreur est une erreur PHP, pas MySQL.
    Je clos alors le sujet et en ré-ouvre un autre dans PHP

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

Discussions similaires

  1. Jointure qui ne renvoie pas tous les enregistrements
    Par rayonx dans le forum Langage SQL
    Réponses: 12
    Dernier message: 19/07/2024, 10h33
  2. pb jointure texture
    Par dweis dans le forum DirectX
    Réponses: 2
    Dernier message: 24/06/2003, 14h33
  3. Jointures en SQL
    Par Guizz dans le forum Langage SQL
    Réponses: 10
    Dernier message: 04/06/2003, 13h21
  4. Réponses: 14
    Dernier message: 17/03/2003, 19h31
  5. Jointures INNER et jointures classiques ???
    Par UbiK dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/09/2002, 11h29

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