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
    Nouveau membre du Club
    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
    Points : 26
    Points
    26
    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 sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 802
    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 802
    Points : 34 066
    Points
    34 066
    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".

  3. #3
    Nouveau membre du Club
    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
    Points : 26
    Points
    26
    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 sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 802
    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 802
    Points : 34 066
    Points
    34 066
    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).

  5. #5
    Nouveau membre du Club
    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
    Points : 26
    Points
    26
    Par défaut
    http://awery.fr/tools/bug.png

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

  6. #6
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 802
    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 802
    Points : 34 066
    Points
    34 066
    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.

  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
    Points : 5 849
    Points
    5 849
    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
    Nouveau membre du Club
    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
    Points : 26
    Points
    26
    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 sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 802
    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 802
    Points : 34 066
    Points
    34 066
    Billets dans le blog
    14
    Par défaut
    Ton erreur est une erreur PHP, pas MySQL.

  10. #10
    Nouveau membre du Club
    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
    Points : 26
    Points
    26
    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