IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Copier une table après un select distinct


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 183
    Par défaut Copier une table après un select distinct
    Bonjour à tous,

    Je suis coincé et j'ai beau regarder, il me semble que mon script est bon mais manifestement pas... J'ai une erreur mysql_fetch_assoc...

    Je vous explique. J'ai une table1 dans une bdd1 qui est en vrac. Je veux enlever les doublons et la copier, champ par champ, dans une table2 de la bdd2.
    Mon script :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
     
     require ("fonctions.php");   // les fonctions personnelles
     require ("conf.pfp");    // définition des bdd
     
     GetMyConnection1();    //fonction de connection et contrôle pour la bdd1
      $tables = mysql_list_tables($bdd1);
     
      GetMyConnection2();    //fonction de connection et contrôle pour la bdd2
     
      while ($line = mysql_fetch_row($tables)) {
     
           $table1 = trim($line[0]);   // nom des tables bdd1. Ce seront les mêmes dans la bdd2
           $table2 = $table1;   
     
                     // tri de la table sur la 'ville'
              // les champs de la table sont id, pays, region, departement, ville, lat, long, et zipCode
           // ici j'utilise le DISTINCT mais je le maîtrise mal...
     
           $sql = "SELECT DISTINCT * FROM $table1 GROUP BY `ville`";
           $rep = mysql_query($sql);
     
           if (!$rep) {
               echo "Erreur DB, impossible de trier la table <BR>";
               echo 'Erreur MySQL : ' . mysql_error()."<BR><BR>";
           }  else {
     
               if ($num_rows = mysql_num_rows($rep) > 0) {
     
                   while ($donnees = mysql_fetch_assoc($rep)) {
     
                       $pays = "";
                       $region = "";
                       $departement = "";
                       $ville = "";
                       $lat = "";
                       $long = "";
                       $zipCode = "";
     
                // ici, dans la table1, le code est global et je le divise pour obtenir le pays et la région
     
                       $code = trim($donnees["code"]);
                       $taille = strlen($code);
                       $pays = left($code, 2);
                       $region = right($code, $taille - 2);
                       $departement = trim($donnees["departement"]);
                       $ville = trim($donnees["ville"]);
                       $lat = trim($donnees["lat"]);
                       $long = trim($donnees["long"]);
                       $zipCode = trim($donnees["zipCode"]);
     
                       $sql = "INSERT INTO $bdd2.$table2
                       VALUES ('', '$pays', '$region', '$departement', '$ville', '$lat', '$long', '$zipCode')";
                       $rep = mysql_query($sql);
     
                       if (!$rep) {
                           echo "Erreur DB, impossible d'enregistrer la table <BR>";
                           echo 'Erreur MySQL : ' . mysql_error()."<BR><BR>";
                       }
                   }
               }
           }
      }
    Si vous pouviez m'aider, merci d'avance.

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 271
    Par défaut
    Dans ton code a la ligne 49
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "INSERT INTO $bdd1.$tabl
    les variable $bdd1 et $tabl ne sont pas definit, en tous cas pas dans la partie de code que tu a mis ici.
    Tu nous dit pas ou exactement l'erreur se produit. Fait des essais de ta requette SQL dans PHPMyAdmin par exemple. Je pense que tu pourra faire le meme boulot juste avec des requettes SQL imbriquées.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 183
    Par défaut
    Merci de votre réponse.

    Oups! j'ai oublié de dire 2 choses : les bdd sont définies en début de scriopt dans un fichier conf.php

    La bdd1, sur le script s'appelle en fait bdd et la bdd2, bdd1. Je les ai appelées bdd1 et bdd2 sur le message pour une meilleure compréhension. J'aurais dû changer aussi le script. Mes excuses, vous avez raison.

    Je vais le refaire.

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 271
    Par défaut
    Quelle est la difference entre Id et Code???
    Dans ton commentaire tu dit tri de la table mais tu fait un group by dans ta requette SQL??

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 183
    Par défaut
    Oui, et c'est peut-être là que ça coince.

    En fait je voudrais que toute ma base soit la même 'à l'exclusion' des doublons. J'ai donc essayé SELECT DISTINCT `ville` FROM mais il ne me donne que les ville, bien sûr. Je veux qu'il me trie toute la base, sur la ville pour les doublons, mais qu'il me donne la rangée complête. Cad :

    id, code, departement, ville, lat, long, zipCode.

    L'id n'est pas indispensable puisqu'auto-incrément et dans la nouvelle base il se creera au fur et à me
    sure.

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 271
    Par défaut
    Sinon tu pourrai faire comme cela pour eliminer les doublons et les inserer dans une nouvelle table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE TABLE nouvelle_table as
    SELECT * FROM ancienne_table GROUP BY ville;
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO nouvelle_table(pays, region, departement, ville, lat, long, zipCode) 
    VALUES SELECT pays, region, departement, ville, lat, long, zipCode FROM ancienne_table GROUP BY ville;
    ou bien travailler sur l'index
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER IGNORE TABLE ancienne_table ADD UNIQUE INDEX(ville);

Discussions similaires

  1. updater une table avec un select distinct d'une autre
    Par SpaceFrog dans le forum Requêtes
    Réponses: 1
    Dernier message: 19/10/2009, 19h28
  2. Réponses: 6
    Dernier message: 11/09/2006, 00h34
  3. copier une table
    Par aragom dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 14/04/2005, 14h04
  4. copier une table vers une autre base de données
    Par Herveg dans le forum Oracle
    Réponses: 3
    Dernier message: 11/01/2005, 14h20
  5. Comment Copier une table dans un fichier?
    Par thx2003 dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/12/2003, 12h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo