Partage
  • Partager sur Facebook
  • Partager sur Twitter

Jointure MySql ou bidouillage ?

Sujet résolu
    14 octobre 2018 à 16:32:46

    Bonjour à tous, je viens vers vous car j'ai un soucis d'incrémentation et impossible de voir quelle est la bonne méthode.

    Mon site répertorie tout les jeux de société d'une structure publique (environ 400 jeux). J'ai bien réussit à créer une page d'administration. L'utilisateur pour créer un jeux doit choisir l'image, une description, UNE PETITE REGLE DU JEU MANUSCRITE, nombre de joueur. . . Le jeu envoyer en BDD, il lui est attribué un ID avec l'auto-increment. J'affiche ensuite ce jeu dans la liste des jeux, les recherches par nom, catégorie. . . . .

    <?php
       $requete = $bdd->query('SELECT COUNT(id) as countid FROM jeux');     
       $nbligne = $requete->fetch(); 
    
     $reponse = $bdd->query('SELECT * FROM jeux ORDER BY title ASC'); 
        $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>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 = ($nbligne['countid'] - 1); $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>
                                    <?php echo htmlspecialchars($donnees['regle']); $i ?>
    
                                </p>
                            </div>
                        </div>
                    <?php } ?>
                </div>
            </div>
        </div>
    <?php $i++; }
    ?>


    C'est la que ça se complique. Pour ne pas avoir à recopier les 30 000 lignes de la règle du monopoly par exemple. J'aimerais, dans la div data qui contient la règle du jeu, afficher des boutons qui affichent une photo de la règle, ou un pdf d'une règle scannée par exemple. Pour ça j'ai créé une nouvelle table avec l'id du jeu concerné par la règle, le chemin du fichier, et le nom du bouton. J'arrive à tout récupérer quand je fait du cas par cas, par contre quand je veux tout les jeux tout plante des que je rajoute le $i = 1;

    <?php
    
                            <div class="data">
                                <h2>Régle du jeu</h2>
                                <p>
                                    <?php echo htmlspecialchars($donnees['regle']); $i ?>
    
                                    <br><br>
    
                                    <?php $reponse = $bdd->query('SELECT * FROM regle WHERE id_add_rule=1'); 
                                    $i = 1;
                                    while ($donnees = $reponse->fetch())
                                    {  ?>
                                    <a class="show" target="Google" href="<?php echo htmlspecialchars($donnees['name_doc']); ?>"><?php echo htmlspecialchars($donnees['entitled']); ?></a><?php $i++; } ?> <p> </div>

    Lorsque je met WHERE id_add_rule=1, tout correspond bien, mais je pense que l'incrémentation des $i se mélange car j'ai des boutons à l'infinie qui s'affiche et impossible d'ouvrir le contenu.


    Autre question, celle du titre, au lieu de mettre WHERE id_add_rule=htmlspecialchars($donnees['id']); comme du bidouillage (pour que les règles afficher soit bien celle du jeu en question), la jointure de table ( vu que la table est déjà créée ) ne serait-elle pas mieux ? 


    Merci

    -
    Edité par Community Technologie 14 octobre 2018 à 16:38:18

    • Partager sur Facebook
    • Partager sur Twitter
      14 octobre 2018 à 18:15:56

      Bonjour,

      J'avoue que je ne comprends pas du tout ce que tu essaies de faire. Pourquoi une autre table ? Tous les jeux n'ont-ils pas une règle ? Et surtout pourquoi une boucle à l'intérieur d'une boucle ?

      • Partager sur Facebook
      • Partager sur Twitter
        14 octobre 2018 à 19:31:39

        Une autre table car comme pour les categories, c’est pas possible de mettre plusieurs valeur dans une colonne ( si il y a plusieurs fichier pdf par exemple ) et un eboucle dans la boucle pour parcourir tout les fichier à afficher, dans tout les jeux.
        • Partager sur Facebook
        • Partager sur Twitter
          14 octobre 2018 à 20:10:02

          Tu peux stocker plusieurs variable dans un même champ. Pour ce faire, on les stocke dans un array, que l'on serialise pour l'enregistrer dans un champ TEXT.
          • Partager sur Facebook
          • Partager sur Twitter
            14 octobre 2018 à 20:25:39

            C'est vrai qu'il y a ça aussi j'y est pas penser au tableau
            • Partager sur Facebook
            • Partager sur Twitter
              14 octobre 2018 à 20:27:54

              Tu peux stocker plusieurs variable dans un même champ. Pour ce faire, on les stocke dans un array, que l'on serialise pour l'enregistrer dans un champ TEXT.
              • Partager sur Facebook
              • Partager sur Twitter
                14 octobre 2018 à 20:29:29

                Bon alors il faut une jointure en effet. Laisse tomber les boucles imbriquées.
                • Partager sur Facebook
                • Partager sur Twitter
                  14 octobre 2018 à 20:47:18

                  Bon ben je me met à ça ^^merci bien
                  • Partager sur Facebook
                  • Partager sur Twitter
                    16 octobre 2018 à 13:30:23

                    On a le droit de faire 3 4 jointures à la fois  ? 

                    SELECT * FROM 
                    INNER JOIN 
                    ON 
                    INNER JOIN
                    ON 
                    INNER JOIN
                    ON 
                    INNER JOIN
                    ON 
                    WHERE 

                    ou 

                    SELECT * FROM 
                    INNER JOIN 
                    ON 
                    INNER JOIN
                    ON 
                    WHERE
                    INNER JOIN
                    ON 
                    INNER JOIN
                    ON 
                    WHERE 




                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 octobre 2018 à 13:56:07

                      BINGO ! Par contre, c'est byzarre comme prob ! Je pensais (mais à tort) qu'il ne chercherait cette valeur qu'une seule fois et non plusieurs....
                      • Partager sur Facebook
                      • Partager sur Twitter
                        16 octobre 2018 à 16:09:10

                        Reader a écrit:

                        On a le droit de faire 3 4 jointures à la fois  ? 

                        SELECT * FROM 
                        INNER JOIN 
                        ON 
                        INNER JOIN
                        ON 
                        INNER JOIN
                        ON 
                        INNER JOIN
                        ON 
                        WHERE 

                        ou 

                        SELECT * FROM 
                        INNER JOIN 
                        ON 
                        INNER JOIN
                        ON 
                        WHERE
                        INNER JOIN
                        ON 
                        INNER JOIN
                        ON 
                        WHERE 




                        On peut faire des jointures à la suite, pas de problème. Pas de WHERE au milieu cependant.

                        • Partager sur Facebook
                        • Partager sur Twitter
                          16 octobre 2018 à 21:44:42

                          Ça y est je me suis échoué :pirate:

                          Je pense que j'ai réussit avec ce code là à coller les l'id des règles au id des jeux.

                          $reponse = $bdd->query("
                              SELECT * FROM regle
                              INNER JOIN jeux_has_regle
                              ON regle.id = jeux_has_regle.regle_id
                              INNER JOIN jeux
                              ON jeux_has_regle.regle_id = jeux.id
                              WHERE jeux.id='".$id_jeux."'");

                          J'ai juste une question, car je ne vois pas comment faire pour ne pas avoir besoin de la boucle dans la boucle que tu m'as dit d'abandonner philodick

                          Merci

                          -
                          Edité par Community Technologie 17 octobre 2018 à 13:57:13

                          • Partager sur Facebook
                          • Partager sur Twitter
                            18 octobre 2018 à 9:09:54

                            Bon reprenons calmement, est-ce que la requête en question te donne toutes les données que tu attends ? Si oui, ce n'est plus que de la mise en forme derrière.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              18 octobre 2018 à 18:37:24

                              oui et non, lorsque je lui demande un id de règle bien précis, ou qu´il y a qu’une règle ça va et l’affichage va ausi pour un seul jeu, mais quand je lui demande de tout m’afficher ça ne vas pas je ne peux même pas voir ce que la div contient car le bouton pour voir la règle se répète à l’infini
                              • Partager sur Facebook
                              • Partager sur Twitter
                                18 octobre 2018 à 19:29:37

                                Reader a écrit:

                                oui et non, lorsque je lui demande un id de règle bien précis, ou qu´il y a qu’une règle ça va et l’affichage va ausi pour un seul jeu, mais quand je lui demande de tout m’afficher ça ne vas pas je ne peux même pas voir ce que la div contient car le bouton pour voir la règle se répète à l’infini


                                Ce n'est qu'un problème d'affichage. Il faut que tu gères l'affichage ou pas de certaines colonnes avec une variable provisoire.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  18 octobre 2018 à 20:10:11

                                  Oui mais c’est l’indentation ou la confusion avec le while du debut qui me pose problème, je regarde ça demain merci
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Jointure MySql ou bidouillage ?

                                  × 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