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 :

Importation depuis un fichier .csv / Eviter les doublons


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Par défaut Importation depuis un fichier .csv / Eviter les doublons
    Bonjour à tous,

    j'ai passé pas mal d'heure sur le .net à essayer de trouver une réponse à cette question sans succès. J'ai peut-être mal cherché, parce que j'ai surtout trouvé comment vérifier la présence d'une table lors d'une importation par lot. Voici le code :

    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
    <?php
    $databasehost = "localhost"; 
    $databasename = "catalogue_trains"; 
    $databasetable = "trainset"; 
    $databaseusername="root"; 
    $databasepassword = ""; 
    $fieldseparator = ","; 
    $lineseparator = "\n";
    $csvfile = ("Liste/Liste.csv");
     
     
    try {
         $pdo = new PDO("mysql:host=$databasehost;dbname=$databasename", 
         $databaseusername, $databasepassword,
         array(
         PDO::MYSQL_ATTR_LOCAL_INFILE => true,
         PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
         )
         );
    } catch (PDOException $e) {
         die("database connection failed: ".$e->getMessage());
         }
     
    $materiel = 'materiel';
    $stmt = $pdo->prepare("SELECT * FROM trainset WHERE materiel=?");
    $stmt->execute([$materiel]); 
    $mat = $stmt->fetch();
     
     
    //On traite les résultats
    if (!$mat) {     
     
         $affectedRows = $pdo->exec("
         LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." INTO TABLE `$databasetable`
         FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)."
         LINES TERMINATED BY ".$pdo->quote($lineseparator));
     
         ?>  <div id="info">Enregistré un total de </div>
     
         <?php
     
         $affectedRows . "lignes à partir du fichier : " . $csvfile;
     
         ?>
     
         <script language='javascript'>
                    temp=document.getElementById('info');
    	        setTimeout('temp.style.display="none"',10000);
     
         </script>
     
         <?php
     
     
         //fclose($file);
     
        }
     
        header('location:index.php');
    ?>
    J'ai trouvé ce code sur le .net et l'ai adapté. Comme dit dans mon fil précédent, il est fonctionnel, mais ne répond pas entièrement à mes attentes.

    Je ne sais pas comment faire pour ne pas avoir de doublons après l'importation du fichier .cvs. Ma table contient plus de 45000 entrées, je me vois donc mal faire un contrôle manuel.

    Je suis coincé, car tout ce que j'ai tenté ne fonctionne pas. Je précise que ma table n'est pas indexée.

    Pouvez-vous indiquer une piste au grand débutant qui vous écrit ?

    Merci d'avance.

    Cordialement
    Pascal

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Il faut indexer les colonnes concernées en UNIQUE

    Et pour que le LOAD DATA ne plante pas lors de l'apparition des doublons, ajoute le mot-clef IGNORE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LOAD DATA INFILE 'file_name' IGNORE INTO TABLE tbl_name
    ...

  3. #3
    Membre confirmé
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Par défaut
    Re,

    merci pour le tuyaux.

    Pascal

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/04/2015, 12h19
  2. Importer des données depuis des fichiers csv dans MySQL
    Par nrpfc dans le forum SQL Procédural
    Réponses: 24
    Dernier message: 09/10/2012, 16h53
  3. Réponses: 1
    Dernier message: 29/02/2012, 17h42
  4. Après importation, eviter les doublons
    Par uloaccess dans le forum Access
    Réponses: 6
    Dernier message: 16/11/2005, 16h36
  5. [langage] 2 fichier dans 1 en evitant les doublons
    Par remixxl dans le forum Langage
    Réponses: 6
    Dernier message: 26/07/2004, 17h05

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