Partage
  • Partager sur Facebook
  • Partager sur Twitter

[MySQL/PHPMyAdmin] Fusionner 2 tables

Sujet résolu
    20 mars 2019 à 12:55:18

    Bonjour

    j'ai téléchargé une table des villes puis une table des départements, jusqu'à maintenant, j'ai réussi à contourner cet inconvénient!

    Mais aujourd'hui, il faudrait que je fasse une fusion des deux tables pour en avoir q'une. 

    Je précise qu'il y'a dans la table ville une colonne qui porte le nom de "ville_département" qui contient le code du département, et dans la table departements une colonne departement_code qui contient le code du département. 

    Le deux n'ont pas le même nom, mais sont du même type, 

    Il faudrait que dans la table ville (par exemple), je puisse ajouter une colonne departement_nom dépendant de ce que contient ville_departement, ou que je crée une table, qui fasse pareil!

    • Partager sur Facebook
    • Partager sur Twitter
      20 mars 2019 à 13:23:47

      Bonjour,

      born1 a écrit:

      jusqu'à maintenant, j'ai réussi à contourner cet inconvénient

      Pourquoi parles-tu d'un inconvénient ? Ce n'est pas un problème, et c'est la bonne façon de structurer les données ?

      Quels problèmes rencontres-tu avec ce modèle ?

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        20 mars 2019 à 15:08:11

        ça m'oblige à faire des jointures ou des requêtes multiples. 

        Je vais tenter de raisonner autrement et si ça m'embête je reviens vers vous !

        Merci

        • Partager sur Facebook
        • Partager sur Twitter
          20 mars 2019 à 15:23:22

          Faire des jointures est quand même la base des systèmes de base de données relationnelles, donc ce n'est pas un inconvénient d'en faire, c'est plutôt un avantage en fait ...

          Je serai curieux de voir ce qui t'embête tant avec un exemple concret de problème que tu rencontres ?

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            20 mars 2019 à 22:15:54

             $lieux = strtolower($_GET['side']);
                $req = $bdd -> prepare('SELECT * FROM villes, departements WHERE ville_slug = :ville1 OR ville_nom = :ville2 OR departement = :departement');
                $req -> bindValue(':departement', $lieux, PDO::PARAM_STR);
                $req -> bindValue(':ville1', $lieux, PDO::PARAM_STR);
                $req -> bindValue(':ville2', $lieux, PDO::PARAM_STR);
                $req -> execute();
                $res = $req ->fetch();
                var_dump($res);

            pourquoi ce code me retourne 

            alors que 


            je trouve tellement plus simple d'avoir une table avec id_ville, cp_ville, nom_ville, departement_ville

            -
            Edité par born1 20 mars 2019 à 22:54:16

            • Partager sur Facebook
            • Partager sur Twitter
              21 mars 2019 à 8:43:09

              Premier point, le code PHP que tu donnes ne récupère que la première ligne retournée par la requête puisque tu ne "fetch" qu'une seule fois ... soit tu mets le fetch dans une boucle while pour parcourir tous les résultats retournés par la requête, soit tu utilises fetchAll pour récupérer tous les résultats dans un tableau et tu parcoures ce tableau dans une boucle foreach ...

              Deuxième point, ta requête n'a pas de jointure alors que tu précises 2 tables ... il faut faire une jointure :

              SELECT *
              FROM
              	villes V
              		INNER JOIN departements D
              			ON V.ville_departement = D.departement_code
              WHERE
              	V.ville_slug = :ville
              	OR V.ville_nom = :ville
              	OR D.departement = :departement

              Le code PHP serait donc plutôt :

              $lieux = strtolower($_GET['side']);
              $req = $bdd -> prepare('
              	SELECT *
              	FROM
              		villes V
              			INNER JOIN departements D
              				ON V.ville_departement = D.departement_code
              	WHERE
              		V.ville_slug = :ville
              		OR V.ville_nom = :ville
              		OR D.departement = :departement'
              );
              $req -> bindValue(':departement', $lieux, PDO::PARAM_STR);
              $req -> bindValue(':ville', $lieux, PDO::PARAM_STR);
              $req -> execute();
              $resultats = $req -> fetchAll();
              
              foreach( $resultats as $res ) {
              	var_dump($res);
              }

              -
              Edité par Benzouye 21 mars 2019 à 8:44:05

              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                21 mars 2019 à 12:19:29

                oui oui j'ai vu j'ai galéré tellement pour répondre, à chaque fois j'avais une page qui disait que mon post est bloqué! 

                j'ai du faire des bêtises en retapant.

                ben en fait non, il y a FROM villes ,  departements,

                donc comme j'expliquais, je n'ai même pas besoin de récupérer les valeurs , je faisais un (COUNT) et j'avais utilisé un (UNION)

                ça marche pour les villes, mais pas pour les départements!

                Dans le post précédent, pourquoi la ville Ozan est associé au département Guadeloupe ? Il n'y absolument rien , aucun lien ! 

                pourquoi ville V et département D?

                Je n'arrive pas à poster ma requête sql une sécurité du site bloque

                très simplement, je veux vérifier que l'ip que j'ai obtenue est bien une ip france (ville ou département reconnu) afin de l'afficher. 

                Je ne veux pas que si l'utilisateur ayant un vpn voit afficher tunisia sur le site 

                -
                Edité par born1 21 mars 2019 à 13:35:07

                • Partager sur Facebook
                • Partager sur Twitter
                  21 mars 2019 à 13:17:31

                  born1 a écrit:

                  pourquoi la ville Ozan est associé au département Guadeloupe ?

                  Car tu n'a pas fais de jointure ...

                  born1 a écrit:

                  ben en fait non, il y a FROM villes ,  departements

                  Cela n'est pas une jointure ... il manque la condition qui relie les deux tables (comme dans mon exemple précédent), MySQL ne peut pas deviner comment lier les deux tables ...

                  Sans condition de jointure, MySQL fait ce que l'on appelle un produit cartésien : pour chaque enregistrement de la première table, il relie chacun des enregistrements de la deuxième.

                  Si tu as 2 villes et 100 départements, sans condition de jointure ta requête ressort 200 lignes, et comme tu fais LIMIT 1, elle te ressort la première ligne "au hasard" ...

                  Il faut vraiment que tu apprennes ce qu'est une jointure avant d'aller plus loin ... Il ne faut pas travailler sans comprendre ce que tu fais et comment utiliser le SQL !

                  -
                  Edité par Benzouye 21 mars 2019 à 13:18:13

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                    21 mars 2019 à 16:18:50

                    ben en fait je connais très vaguement ce qu'est une jointure, mais pour ce que j'en fait :-°

                    ce que je voulais c'est vérifier si dans la variable @lieu, je suis bien dans la liste des lieux autorisés. 

                    donc simplement, l'utilisateur renseigne paris, cherche dans ville et dans département si il existe paris,

                    si il renseigne Abu-Dhabi cherche dans ville et département si il existe Abu-Dhabi 

                    dans quel cas une action suit ou une autre . 

                    pour moi (et peut être que je me trompe, d'ailleurs très surement ) , une requête de jointure permet de récupérer des infos d'une autre table grâce à une info récupérer dans l'une d'entre elle . 

                    Dans  ce cas récupérer toutes les infos d'une ville ou d'un département, la requête de jointure me serais utile par exemple pour avoir une liste des villes du département Guadeloupe, Aisne, ou autre 

                    ou les infos d'une ville renseigné, Ville cp, département etc, 

                    C'est pourquoi une requête  de jointure me semble pas la meilleure des solutions. 

                    Sinon j'ai cogité sur le code, fais une requête de jointure et récupéré l'info dont j'avais besoin.

                    $lieux = strtolower ($_GET['localisation']);
                        //on prépare la requête
                    $req = $bdd -> prepare('SELECT COUNT(*) FROM villes V INNER JOIN departements D ON V.ville_departement = D.departement_code WHERE V.ville_slug = :ville OR V.ville_nom = :ville OR D.departement = :departement');
                    
                        //bindé la variable lieux
                    $req -> bindValue(':departement', $lieux, PDO::PARAM_STR);
                    $req -> bindValue(':ville', $lieux, PDO::PARAM_STR);



                    Je reste tout de même dans l'attente de lire toute autre solution qui serait plus adaptée à ce que je souhaite faire s'il en existe.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 mars 2019 à 16:59:23

                      Bonjour,

                      Personnellement j'utilise des vues car je trouve ça en effet plus simple par la suite dans php ;)

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Call me Spaceman

                        21 mars 2019 à 17:29:07

                        born1 a écrit:

                        j'ai cogité sur le code, fais une requête de jointure et récupéré l'info dont j'avais besoin

                        Oui ... enfin ... tu as juste repris le code proposé plus haut ... :p

                        born1 a écrit:

                        une requête de jointure permet de récupérer des infos d'une autre table grâce à une info récupérer dans l'une d'entre elle

                        On pourrais dire ça. Dans ton exemple, l'utilisateur saisit une recherche. Toi tu dois trouver si une ville correspond à cette recherche, ou si une ville est liée à un département qui correspond à cette recherche ... Le fait que la ville soit liée au département et que la recherche puisse porter sur le département impose la jointure ... point.

                        NeoSensEight a écrit:

                        j'utilise des vues car je trouve ça en effet plus simple

                        Les vues ne simplifieront pas le code dans cet exemple ... Dans tous les cas il faut écrire la requête une fois ... que tu l'écrives dans ton code PHP ou dans MySQL c'est kif kif.

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

                        [MySQL/PHPMyAdmin] Fusionner 2 tables

                        × 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