Partage
  • Partager sur Facebook
  • Partager sur Twitter

Plusieurs catégorie par article

Une catégories ça va, plusieurs je n'y arrive plus

Sujet résolu
    1 septembre 2019 à 21:00:35

    Bonjour ! 

    J'ai initialement écrit ce sujet dans "php", mais je le transfert ici sur conseil d'un membre du forum.

    Je suis entrain de coder une partie "Actualités" d'un site.

    Je voudrai qu'un article puisse avoir plusieurs catégories, cependant je bloque.

    Voici ce que j'ai fait actuellement : 

    Une table "Catégories" avec comme colonnes "id" et "categorie"

    Une autre table "Actualites" avec comme colonne "id", "Titre" et "Id_Categorie1".

    Ce code fonctionne donc en jointure de table : 

    <?php
    
    // Récupération des messages
    
    $reponse = $bdd->query('    SELECT actualites.Id_Categorie1, categories.Categorie 
    
                                FROM categories
    
                                INNER JOIN actualites 
    
                                ON actualites.Id_Categorie1 = categories.id');
    
    
    // Affichage id et categorie correspondante
    
    while ($donnees = $reponse->fetch())
    
    {
        ?>
                        <p>
    
                            <?php
    
                            // Affichage de la catégorie 1
    
                            echo htmlspecialchars($donnees['Id_Categorie1']);
    
                            echo htmlspecialchars($donnees['Categorie']);
    
                            ?>
    
                        </p>
    
        <?php
    
    }
    
    $reponse->closeCursor();
    
    ?>

    Cependant, je voudrai que l'article puisse avoir plusieurs catégories associées! J'ai donc effectué, après des recherches google, une nouvelle colonne sur la table "actualites", et ai écrit ce code ... qui ne fonctionne pas.

    <?php
    
    // Récupération des messages
    
    $reponse = $bdd->query('    SELECT actualites.Id_Categorie1, actualites.Id_Categorie2,  categories.Categorie 
    
                                FROM categories
    
                                INNER JOIN actualites 
    
                                ON actualites.Id_Categorie1 = categories.id
    
                                INNER JOIN actualites 
    
                                ON actualites.Id_Categorie2 = categories.id
    ');
    
    
    // Affichage id et categorie correspondante
    
    while ($donnees = $reponse->fetch())
    
    {
        ?>
                        <p>
    
                            <?php
    
                            // Affichage de la catégorie 1
    
                            echo htmlspecialchars($donnees['Id_Categorie1']);
    
                            echo htmlspecialchars($donnees['Categorie']);
    
                            // Affichage de la catégorie 2
    
                            echo htmlspecialchars($donnees['Id_Categorie2']);
    
                            echo htmlspecialchars($donnees['Categorie']);
    
                            ?>
    
                        </p>
    
        <?php
    
    }
    
    $reponse->closeCursor();
    
    ?>


    Y a t'il une solution pour que mon article puisse avoir autant de catégorie qu'il le veut? En créant la maquette graphique, je voulais que chaque articles puissent avoir une, deux, quatre, dix catégories au choix. Il faudrait que cette information soit contenue dans la colonne "Id_Catégorie", mais je n'arrive pas à le faire...

    • Partager sur Facebook
    • Partager sur Twitter
      2 septembre 2019 à 13:50:59

      Bonjour,

      barback a écrit:

      Y a t'il une solution pour que mon article puisse avoir autant de catégorie qu'il le veut ?

      Oui, cela s'appelle une relation n,n (de plusieurs à plusieurs) : un article est lié à plusieurs catégories, une catégorie est liée à plusieurs articles.

      Avec une base de données relationnelle, cela se modélise par une table de relation. Ton modèle devrait donc être :

      • actualite ( id [pk], titre, contenu, etc. )
      • categorie ( id [pk], libelle )
      • actualite_categorie ( id_actualite [pk][fk], id_categorie [pk][fk] )

      Dans la troisième table, la clé primaire est composée sur les deux colonnes (pas deux clés primaires, mais une seule sur deux colonnes).

      Tu peux ainsi représenter autant de lien actualités / catégorie que tu le souhaites.

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        2 septembre 2019 à 18:11:33

        Super, merci pour cette réponse, je vais lire la doc "table de relation" pour compléter tes explications, c'est précisément le mot clef que je cherchais.

        [edit] ps : je viens de voir ton message pour le doublon, je signalerai la prochaine fois.

        -
        Edité par barback 2 septembre 2019 à 18:27:24

        • Partager sur Facebook
        • Partager sur Twitter

        Plusieurs catégorie par article

        × 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