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 :

Eliminer les doublons & importer [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Him
    Him est déconnecté
    Membre régulier Avatar de Him
    Profil pro
    Inscrit en
    février 2006
    Messages
    244
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : février 2006
    Messages : 244
    Points : 112
    Points
    112
    Par défaut Eliminer les doublons & importer
    Bonjour,

    Je dois insérer un fichier de 2000 lignes dans mysql.
    éventuellement je peux le transformer en csv, la n'est pas le problème.

    Ce qu'il y a c'est que dans toutes ces lignes, il y a fort à parier qu'il y en à 500 identiques. j'aimerais donc pouvoir supprimer les doublons avant de les enregistrer dans la base.

    Ma question est donc, est il réalisable en php de parser un fichier .txt & d'en supprimer les doublons, & ensuite d'insérer tout cela ligne par ligne dans mysql.

    Et surtout comment

    Merci d'avance.

  2. #2
    Membre habitué Avatar de kazhar
    Profil pro
    Étudiant
    Inscrit en
    novembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2006
    Messages : 126
    Points : 148
    Points
    148
    Par défaut
    Pourquoi ne pas faire encore plus simplement. Vérifier, avant un ajout, que l'entrée n'existe pas dans la base, et n'ajouter que si elle n'existe pas.
    En ajoutant des clés uniques dans ta table, tu t'assurera également qu'il n'y ait réellement aucun doublon.
    Il faut aimer les autres, non pour soi, mais pour eux - Proverbe Espagnol
    développeur web

  3. #3
    Him
    Him est déconnecté
    Membre régulier Avatar de Him
    Profil pro
    Inscrit en
    février 2006
    Messages
    244
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : février 2006
    Messages : 244
    Points : 112
    Points
    112
    Par défaut
    Oui daccord, mais comment faire en CSV ( import via phpmyadmin )
    ou via le fichier txt ?

    Désolé, mais je tatonne encore beaucoup en php, je découvre

  4. #4
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    février 2005
    Messages
    2 020
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2005
    Messages : 2 020
    Points : 2 273
    Points
    2 273
    Par défaut
    Salut,
    tu peux aussi mettre ton fichier .sql dans un tableau avec file() et dédoublonner le tableau avec array_unique(). Ensuite t'as plus qu'à boucler sur le tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach($tab as $row) {
    mysql_query($row);
    }
    C'est le même principe avec un CSV, il faudra que tu fasses un test sur les champs pour savoir si tu dois mettre des quotes ou non, pour les champs non numériques.


    Bye
    Vive les roues en pierre

  5. #5
    Him
    Him est déconnecté
    Membre régulier Avatar de Him
    Profil pro
    Inscrit en
    février 2006
    Messages
    244
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : février 2006
    Messages : 244
    Points : 112
    Points
    112
    Par défaut
    Bonjour,

    bon voici comment j'ai procéder, cela sera surement utile à beaucoup de monde, vu que je n'ai pas trouvé cette réponse quand je suis arrivé ici

    J'ai donc mis dans un fichier .txt tous les éléments à enregistrer dans la base ( un élément par ligne )

    & j'ai parser mon fichier comme ceci :

    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
    	<?php
     
    		// Connection à la base de donnée( par défaut paramètre local)
    		$connect = mysql_connect("localhost", "****", "******");
    		// selection de la base...
    		mysql_select_db("*****",$connect);
     
    		$handle = @fopen("fichier.txt", "r");
    		if ($handle) {
    		while (!feof($handle)) {
    			$buffer = fgets($handle, 4096);
     
    			$sql = mysql_query("SELECT COUNT(*) AS nb_email FROM lettre WHERE email='".$buffer."'");
     
    				if (mysql_result($sql, 0, 'nb_email') == 0)
                        {
     
    					mysql_query("INSERT INTO lettre (id, email) VALUES ('','".$buffer."')") or die(mysql_error());
    					echo 'de nouvelles adresses ont été ajoutées';
     
    					}
     
    			echo "('', '".$buffer."'),<br />\n";
    			}
     
    		fclose($handle);
    		}
    	?>
    Mais voila, j'aimerai à la fin de ma page, ( ou au début ) indiquer : "x enregistrements ont étés effectués". & "x enregistrement ont étés refusés ( doublons )

    Quelqu'un à une idée ?

  6. #6
    Him
    Him est déconnecté
    Membre régulier Avatar de Him
    Profil pro
    Inscrit en
    février 2006
    Messages
    244
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : février 2006
    Messages : 244
    Points : 112
    Points
    112
    Par défaut
    J'ai repensé un peu, & je me dis que je peux toujours compter le nombre d'enregistrement avant la boucle, & le recompter ensuite pour faire une soustraction & afficher le résultat. Ensuite de se résultat compter combien il ya de lignes dans le fichier, & en faire la différence pour les refus.

    Mais cela me semble bien long & bien lourd en requête pour un résultat aussi facil. Non ?

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : janvier 2007
    Messages : 1 448
    Points : 2 245
    Points
    2 245
    Par défaut
    Salut,

    Amha pour 2 000 lignes le plus simple reste encore de faire l'import complet dans ta bdd.
    A partir de la il sera extrement aisé de supprimer les doublons via une requete et l'utilisation des clauses comme group by ou distinct.

    bye

  8. #8
    Him
    Him est déconnecté
    Membre régulier Avatar de Him
    Profil pro
    Inscrit en
    février 2006
    Messages
    244
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : février 2006
    Messages : 244
    Points : 112
    Points
    112
    Par défaut
    Toi tu m'as pas suivi, relis mes derniers post, ça c'est fixé

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : janvier 2007
    Messages : 1 448
    Points : 2 245
    Points
    2 245
    Par défaut
    Hm oui effectivement....

    M'enfin pour répondre àta question. Pourquoi ne pas simplment incrémenter deux compteurs ?

    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
     
    <?php
    $nb_enregistrement_accepte = 0;
    $nb_enregistrements_refuses = 0;
     
    		// Connection à la base de donnée( par défaut paramètre local)
    		$connect = mysql_connect("localhost", "****", "******");
    		// selection de la base...
    		mysql_select_db("*****",$connect);
     
    		$handle = @fopen("fichier.txt", "r");
    		if ($handle) {
    		while (!feof($handle)) {
    			$buffer = fgets($handle, 4096);
     
    			$sql = mysql_query("SELECT COUNT(*) AS nb_email FROM lettre WHERE email='".$buffer."'");
     
    				if (mysql_result($sql, 0, 'nb_email') == 0)
                        {
     
    					mysql_query("INSERT INTO lettre (id, email) VALUES ('','".$buffer."')") or die(mysql_error());
    					echo 'de nouvelles adresses ont été ajoutées';
    					$nb_enregistrement_accepte++;
    					}
    else
    {
    $nb_enregistrements_refuses++;
    }
     
    			echo "('', '".$buffer."'),<br />\n";
    			}
     
    		fclose($handle);
    		}
     
    echo "L'import du fichier est terminé.<br/>";
    echo $nb_enregistrement_accepte." insertions ont étés effectuées<br/>";
    echo $nb_enregistrements_refuses." insertions ont étés refusées<br/>";
    echo "L'application à traiter ".($nb_enregistrement_accepte+$nb_enregistrement_refuses)." lignes au total.<br/>";
    	?>
    Si j'ai bien suivit ton code, se devrait être aussi simple que cela.

    bye

  10. #10
    Him
    Him est déconnecté
    Membre régulier Avatar de Him
    Profil pro
    Inscrit en
    février 2006
    Messages
    244
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : février 2006
    Messages : 244
    Points : 112
    Points
    112
    Par défaut
    huhu...

    & pourquoi moi j'ai pas pensé à ça plus tôt ?

    merci à toi, & à vous.

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

Discussions similaires

  1. eliminer les doublons d'un tableau
    Par wided_instm dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 22/09/2006, 10h56
  2. TMemo : eliminer les doublons
    Par delphidebutant dans le forum Delphi
    Réponses: 4
    Dernier message: 28/08/2006, 18h13
  3. [XSL] Eliminer les doublons dans un noeud
    Par Shadow aok dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 13/04/2006, 15h17
  4. Eliminer les doublons dans un tableau d'entiers
    Par engi dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 21/03/2006, 13h59
  5. Eliminer les doublons d'un tableau de hachage
    Par dreydrey dans le forum Langage
    Réponses: 21
    Dernier message: 15/11/2005, 15h03

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