Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de jointure

Sujet résolu
    16 septembre 2017 à 16:54:53

    Bonjour à tous,

    Je vous explique mon problème:

    J'ai donc une table annonce et une autre table photo donc evidemment avec la FK dans annonce qui porte pour nom id_photo et en fait je suis sur un sujet d'un site e-commerce ou je dois donc afficher 5 photo sur la fiche produit... Or je n'ai pas réussi à faire la requête php/SQL afin de faire une jointure entre les deux tables pour que les photos de cette annonce ci apparaisse si je clique sur cette annonce... Je vous montre le code, dites moi si vous avez besoin d'autre chose... Merci d'avance

    $photo_file = $pdo -> query("SELECT * FROM annonce RIGHT JOIN photo ON id_annonce = id_photo");
    $photo_get = $photo_file -> fetchAll();
    
    
    
    et le HTML :
    
    
     <div class="service1-objets col-sm-2 col-md-2 pull-left">
                            <center>
                                <a id="item-1" class="service1-objet">
                                    <img src="<?= RACINE_SITE ?>photo/<?= $photo_get['photo1']?>" alt=""></img>
                                </a>
                                <a id="item-2" class="service1-objet">
                                    <img src="<?= RACINE_SITE ?>photo/<?= $photo_get['photo2']?>" alt=""></img>
                                </a>
                                <a id="item-3" class="service1-objet">
                                    <img src="<?= RACINE_SITE ?>photo/<?= $photo_get['photo3']?>" alt=""></img>
                                </a>
                                <a id="item-4" class="service1-objet">
                                    <img src="<?= RACINE_SITE ?>photo/<?= $photo_get['photo4']?>" alt=""></img>
                                </a>
                            </center>

     
    Je précise que cela me met : Warning: PDO::query(): SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id_photo' in where clause is ambiguous

    Même en essayant de différentes façons telle que :


    $photo_file = $pdo -> query("SELECT photo1, photo2, photo3, photo4, photo5 FROM photo LEFT JOIN annonce ON id_photo = id_annonce");
    $photo_get = $photo_file -> fetchAll();




    Cela ne conftionne pas...

    ps : voici les tables en questions au cas où :


    table annonce

    id_annonce

    annonce

    membre

    id_photo

    etc...

    table photo


    id_photo

    photo1

    photo2

    photo3

    photo4

    photo5

    -
    Edité par Skova 16 septembre 2017 à 18:06:57

    • Partager sur Facebook
    • Partager sur Twitter
      17 septembre 2017 à 12:43:11

      Hello Ulrich,

      L'erreur que MySQL produit veut dire qu'il ne sait pas quel id_photo utiliser puisque ce nom de colonne existe pour tes deux tables.

      En général c'est une bonne pratique de donner des alias à tes tables et d'utiliser ces alias dans tes autres clauses.

      Dans ton cas, il faudrait donc écrire:

      SELECT photo1, photo2, photo3, photo4, photo5 
      FROM photo p 
      LEFT JOIN annonce a ON p.id_photo = a.id_annonce

      Maintenant ce qui m'inquiète un peu c'est tes choix de design pour ces tables. Tu as une relation "Plusieurs photos => une annonce".

      Donc ce que tu devrais avoir c'est:

      annonce

      id

      description

      ...

      photo

      id

      fichier

      alt

      id_annonce => annonce.id

      Bonne chance

      Cordialement,

      the Lebanese

      -
      Edité par the Lebanese 17 septembre 2017 à 12:43:38

      • Partager sur Facebook
      • Partager sur Twitter
        18 septembre 2017 à 5:06:39

        Effectivement,

        Ton problème est que les deux tables utilisées dans le JOIN ont une colonne portant le même nom.

        • Partager sur Facebook
        • Partager sur Twitter
        Arch : "Keep It Simple, Stupid"
          18 septembre 2017 à 9:16:49

          Bonjour,

          +1 pour the lebanese ...

          Lorsque tu commences à numéroter les noms de colonne, ici photoX, c'est qu'il y a un problème de conception ... Que se passera-t-il si tu décides de rajouter une sixième ou septième photo ... Tu sera obligé de modifier ta base de données et ton application ...

          Alors que si tu suis les conseils de modélisation donné, ton application sera plus évolutive ...

          Après je ne comprends pas l'intérêt de ta jointure droite (ou gauche chez the lebanese) ... tu cherches toutes les annonces, qu'elles aient des photos ou non, et non le contraire ...

          Enfin, tu fais la jointure sur id_annonce alors que ce serait sur id_photo ...

          Ta requête serait donc plutôt :

          SELECT *
          FROM
              annonce A
                  LEFT JOIN photo P
                      ON A.id_photo = P.id_photo

          Cela dit, je t'encourage fortement à modifier ton application et ta base pour modéliser une vraie relation 1,n ...

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            18 septembre 2017 à 16:37:18

            Bonjour à tous, 

            Je vous remercie de tout le temps que vous avez pris pour m'aider ! Ensuite la BDD je me décharge de toutes responsabilités car c'était la BDD donnée dans l'énoncé du projet final de formation que je suis ! honte à eux ahah.

            En tout cas la modélisation que vous m'avez donné me semble bien plus dynamique. Je test ça de suite. Merci encore ! et bonne fin de journée à vous.

            Ulrich

            • Partager sur Facebook
            • Partager sur Twitter

            Problème de jointure

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown