Partage
  • Partager sur Facebook
  • Partager sur Twitter

1 jeu à multiple catégories

    26 septembre 2018 à 18:25:22

    Salut à tous,

    Je vous embête encore ici, mais pas pour une erreur de code cette fois mdr.

    Je me demander comment je pouvais associer un jeux à plusieurs catégories.

    Par exemple le monopoly aura comme catégories Argent Plateau et Manipulation

    J'ai fait une table sur Mysql Workbench qui ressemble à ça.

    Je pense que tout cela se fait avec une jointure de table, mais en lisant les cours jointures et mysql je n'est rien vu de satisfaisant pour mon cas. 

    Avez-vous des pistes stp ? Merci

    -
    Edité par Community Technologie 26 septembre 2018 à 18:56:18

    • Partager sur Facebook
    • Partager sur Twitter
      26 septembre 2018 à 23:40:04

      Bonjour,

      c'est pourtant une jointure basique : `jeux` sur `jeux_has_categories` sur `categories`

      Si des jeux n'ont pas de catégorie et que tu veux les afficher, il faudra une jointure externe.

      • Partager sur Facebook
      • Partager sur Twitter
        27 septembre 2018 à 7:29:22

        Ok phil, je vais chercher de ce coté, je te remercie
        • Partager sur Facebook
        • Partager sur Twitter
          28 septembre 2018 à 13:32:57

          Je ne comprend pas comment je peux, avec INSERT INTO par exemple, dire que tel jeux appartient à tel et tel catégorie. C'est la table jeux_has_categories que j'ai du mal à voir comment la remplir
          • Partager sur Facebook
          • Partager sur Twitter
            28 septembre 2018 à 16:52:24

            Bonjour,

            Chaque jeu a son propre id.

            Chaque catégorie a son propre id.

            Pour associer le jeu id=1 avec la catégorie id=1, il faut insérer ce couple dans la table de relation :

            INSERT INTO jeux_hax_categories ( jeux_id, categories_id )
            VALUES ( 1, 1 );

            Qu'est-ce qui te gêne ici ?

            • Partager sur Facebook
            • Partager sur Twitter
            Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
              30 septembre 2018 à 18:43:45

              Hello, ça oui, mais pour mettre le jeu id=1 avec la catégorie id=3, 5, 9 c'est quelque chose comme ça ? 

              INSERT INTO jeux_hax_categories ( jeux_id, categories_id )
              VALUES ( 1, 1, 5, 9 );

              Vu que je le fait avec 2 tables, une jeux, l'autre catégorie comment associé à distance en fait.

              Merci

              -
              Edité par Community Technologie 30 septembre 2018 à 18:44:42

              • Partager sur Facebook
              • Partager sur Twitter
                30 septembre 2018 à 22:13:35

                Je ne sais pas si tu as essayé, mais mettre 4 valeurs pour deux colonnes, ça va pas le faire.

                INSERT INTO jeux_hax_categories ( jeux_id, categories_id )
                VALUES ( 1,3),(1,5),(1,9 );



                • Partager sur Facebook
                • Partager sur Twitter
                  1 octobre 2018 à 7:33:30

                  J'ai pas essayer, mais c'est pour ça que je ne voyais pas comment c'était possible. Merci je vais essayer ça se soir
                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 octobre 2018 à 20:24:54

                    Bonjour à tous,

                    Effectivement philodick ça marche nickel ce que tu m'as proposer, par contre il y a un truc que je ne saisit pas et qui mérite un éclaircissement pour que je comprenne enfin les jointures.

                    Dans l'exemple du cours il y a 2 tables pour faire les jointures, or quand on créée des tables avec MySqlWorkbench, lorsqu'on lies les tables entre elles, ça créer une jointure comme dans mon premier post le jeux_has_categories. Mais je n'arrive pas à appliquer les exemples du cours, avec ce type de table du coup j'ai du mal à comprendre.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      8 octobre 2018 à 20:51:45

                      Il faudrait voir ce que tu as essayé. Dans le principe tu fais une jointure de la table jeux vers la table de liaison (jeux_has_categories), puis de cette table de liaison vers la table categories.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        9 octobre 2018 à 13:32:43

                        Hummm d'accord. J'ai essayer et je me retrouve avec ça pour la jointure entre jeux et jeux_has_categories

                            $reponse = $bdd->query('
                            SELECT jeux.title, jeux_has_categories.jeux_id 
                            FROM jeux 
                            INNER JOIN jeux_has_categories 
                            ON jeux.id = jeux_has_categories.jeux_id');


                        et ceci pour jeux_has_categories et categories

                            $reponse = $bdd->query('
                            SELECT jeux_has_categories.jeux_id, categories.id
                            FROM jeux_has_categories 
                            INNER JOIN categories 
                            ON jeux_has_categories.categorie_id = categories.nom_cat');


                        Et une autre question arrive, comment joindre les jointures ? en faisant les 2 SELECT à la suite ? (J'avoue que je n'ai pas encore chercher :euh: ) 

                        • Partager sur Facebook
                        • Partager sur Twitter
                          9 octobre 2018 à 13:52:34

                          Tout simplement en mettant les jointures à la suite :

                          $reponse = $bdd->query('
                          SELECT *
                          FROM jeux
                          INNER JOIN jeux_has_categories
                          ON jeux.id = jeux_has_categories.jeux_id
                          INNER JOIN categories
                          ON jeux_has_categories.categorie_id = categories.nom_cat');



                          • Partager sur Facebook
                          • Partager sur Twitter
                            9 octobre 2018 à 18:59:37

                            Ça ne fonctionne pas, comment je peux contrôler les étapes, un peux comme les var_dump(); ? 

                            Car si je décortique ton code :

                                $reponse = $bdd->query('
                            
                                SELECT *
                            // Tu sélectionne tout
                                FROM jeux
                            // Dans la table jeux
                                INNER JOIN jeux_has_categories
                            // on fait une jointure interne de jeux avec "jeux_has_categories"
                                ON jeux.id = jeux_has_categories.jeux_id
                            // on prend le l'id du jeux et l'id de jeux_id
                                INNER JOIN categories
                            // on les joints aux catégories
                                ON jeux_has_categories.categories_id = categories.nom_cat
                            // et on récupère le nom de la catégorie qui correspond à l'id de la catégorie 
                            ');
                            

                            J'ai ça, pas d'erreur mais rien ne s'affiche:  

                            <?php require 'connexion-BDD-localhost.php';
                                
                                
                                $reponse = $bdd->query('
                                SELECT *
                                FROM jeux
                                INNER JOIN jeux_has_categories
                                ON jeux.id = jeux_has_categories.jeux_id
                                INNER JOIN categories
                                ON jeux_has_categories.categories_id = categories.nom_cat');
                            
                                if($reponse){
                                $i = 1;
                                while ($donnees = $reponse->fetch())
                                {  ?>
                                    <div class="tuile">
                                    <img src="<?php echo htmlspecialchars($donnees['img']); ?>" alt="Image du jeux <?php echo htmlspecialchars($donnees['title']); ?>">
                                    <div class="content-elements">
                                        
                                        <div class="inline-games-stats">
                                            <div class="nbr_joueurs"><h2><?php echo htmlspecialchars($donnees['title']); ?></h2></div>
                                            <div class="temps"><p>ID <?php echo htmlspecialchars($donnees['id']); ?></p></div>
                                        </div>
                                        
                                        <br><br><br>
                                        
                                        <p><?php echo htmlspecialchars($donnees['description_tuile']); ?></p>
                                        <div class="inline-games-stats">
                                            <div class="nbr_joueurs"><p>Nombres de joueurs <?php echo htmlspecialchars($donnees['joueurs_mini']); ?> à <?php echo htmlspecialchars($donnees['joueurs_max']); ?></p></div>
                                            <div class="temps"><p>Temps de jeu <?php echo htmlspecialchars($donnees['duree_de_jeux']); ?></p></div>
                                            <?php
                                            for($i = 2; $i < $nbligne['countid']; $i++){ ?>
                                                <div class="content-regle">
                                                    <div class="voir">
                                                    <input type="button" class="show" value="Montrer la régle">
                                                    </div>
                            
                                                    <div class="data">
                                                    <h2>Régle du jeu</h2>
                                                    <p><img src="<?php echo htmlspecialchars($donnees['regle']); $i?>"></p>
                                                    </div>
                                                </div>
                                            <?php } ?>
                                        </div>
                                        <div class="data"><h2>Régle du jeu</h2><p><?php echo htmlspecialchars($donnees['regle']); ?></p></div>
                                    </div>
                                </div>
                                
                                
                                   
                                    
                            <?php $i++; } }
                                   
                                else 
                                    
                                {
                                    echo "Erreur ou aucun résultat";
                                } 
                            ?>



                            • Partager sur Facebook
                            • Partager sur Twitter
                              9 octobre 2018 à 20:51:50

                              Bon c'est vrai que je n'ai que collé ton code. Je n'avais pas vu que tu avais fait la deuxième requête sur nom_cat au lieu de l'id.

                              -
                              Edité par philodick 9 octobre 2018 à 20:52:46

                              • Partager sur Facebook
                              • Partager sur Twitter
                                9 octobre 2018 à 21:07:25

                                $reponse = $bdd->query('SELECT * FROM jeux
                                INNER JOIN jeux_has_categories
                                ON jeux.id = jeux_has_categories.jeux_id
                                INNER JOIN categories
                                ON jeux_has_categories.categorie_id = categories.id');
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  9 octobre 2018 à 21:49:54

                                  Ah c'est bon j'ai compris, par contre ça me donne pas les jeux par catégorie ( Tout ceux qui sont dans la catégorie Argent par exemple ) mais tout les jeux ayant une catégorie quelque ce soit.

                                  -
                                  Edité par Community Technologie 9 octobre 2018 à 21:54:10

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    9 octobre 2018 à 22:28:59

                                    Reader a écrit:

                                    Ah c'est bon j'ai compris, par contre ça me donne pas les jeux par catégorie ( Tout ceux qui sont dans la catégorie Argent par exemple ) mais tout les jeux ayant une catégorie quelque ce soit.

                                    -
                                    Edité par Reader il y a 33 minutes

                                    Euh, évidemment, il n'y a pas encore de clause WHERE dans ta requête... Il faut quand même voir les bases.

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      10 octobre 2018 à 7:20:53

                                      ah l'abrutis, en lisant le cours je me suis arrêter là :

                                      Pour éviter de confondre leWHERE« traditionnel » qui filtre les données et leWHEREde jointure que l'on vient de découvrir, on va utiliser la syntaxeJOIN.

                                      Pour rappel, voici la requête qu'on utilisait avec unWHERE : ...

                                      Avec unJOIN, on écrirait cette même requête de la façon suivante : ...

                                      Je me suis dit qu'il n'y avait plus de where du tout. . . Je vais me débrouiller avec ça. Merci beaucoup Philodick pour ta patience :D

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      1 jeu à multiple catégories

                                      × 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