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 :

Supprimer des doublons existants


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2007
    Messages : 262
    Points : 172
    Points
    172
    Par défaut Supprimer des doublons existants
    Bonjour à tous,

    Un léger soucis : comment supprimer dans ma Base de données des doublons... ? et comment faire pour qu'au final je n'ai plus qu'une seule ligne à la place des 7 ou 8 de base...?

    Je n'arrive pas à traiter mes insertions de données à la racine (lors de l'insert) donc je les voudrais les traiter en autmatique après...

    Merci d'avance pour votre coup de main je suis en galère...

  2. #2
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Qu'entends tu par Doublon ?

    Des vrais doublons parfait avec aucun critères déterminant ?
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  3. #3
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2007
    Messages : 262
    Points : 172
    Points
    172
    Par défaut
    En fait mon soucis est que :

    1) j'importe mes données via un CSV
    2) je n'arrive pas à tester l'existence de mes données dans la base avant qu'elles aient été créées
    3) je voudrais récupérer l'ensemble des doublons pour une ligne et les supprimer afin de n'avoir qu'une ligne de données uniques...

    Je vous envoie mon code d'importation du CSV + un exemple de ligne de ce CSV.

    Exemple d'une ligne tirée de mon CSV :

    A.C.I. Laboratoires France et International || CD6 Sibilot ||13480 || CABRIES ||
    04 42 94 92 40 ||04 42 94 16 46 ||301126736 ||3,01E+13 ||Siège ||1974 ||

    S.A.R.L. ||360000 ||914694 ||110 ||Fabricants, Distributeurs, Services ||

    http://www.laboratoires-aci.com


    J'espère que vous comprenez bien... Donc colonne 0 -> A.C.I. Lab... et ainsi de suite.

    Donc cette ligne se répète 7 fois.

    Voici mon code d'importation :

    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    if(isset($_POST['groupe'])) {
    				$i='1';
    			    $repertoireDestination = "upload/";
    			    $nomDestination        = "groupe.csv";
     
    			    // Pour raison de sécurité nous ajouterons aux fichiers portant une extension .php .php3, l'extension .txt
    			    if (eregi(".php", $nomDestination)) {
    			        $nomDestination .= ".txt";
    			    }
     
    			    if (is_uploaded_file($_FILES["monfichier"]["tmp_name"])) {
    			        if (copy($_FILES["monfichier"]["tmp_name"],
                	       $repertoireDestination.$nomDestination)) {
     
    						$row = 1;
     
    						$handle = fopen("upload/groupe.csv", "r");
    						while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
     
    						    $num = count($data);
    						    $row++;
     
    							for ($c=0; $c < $num; $c++)
    							{	
    								$var="";
    								// on met en place la variable contenant les champs bdd
    								switch ($c)	
    								{
    									case 0 : $var="sigle";
    									break;
    									case 1 : $var="ad1";
    									break;
    									case 3 : $var="CP";
    									break;
    									case 4 : $var="ville";
    									break;
    									case 5 : $var="BP";
    									break;
    									case 6 : $var="tel1";
    									break;
    									case 7 : $var="fax";
    									break;
    									case 8 : $var="siren";
    									break;
    									case 9 : $var="siret";
    									break;
    									case 10 : $var="statut";
    									break;
    									case 11 : $var="date_fondation";
    									break;
    									case 12 : $var="forme_jur";
    									break;
    									case 13 : $var="capital";
    									break;
    									case 14 : $var="CA_tot";
    									break;
    									case 15 : $var="CA_export";
    									break;
    									case 16 : $var="effectif_tot";
    									break;
    									case 17 : $var="contenu";
    									break;
    									case 18 : $var="site";
    									break;
    								}	
     
    								if($c != 2) {
    								$data[$c]=addslashes(utf8_encode($data[$c]));
    								//Existence des données :
    								$selecdonnee=mysql_query("SELECT * FROM tab_societe WHERE '".$var."'='".$data[$c]."' ") or die(mysql_error()."test existence1");
     
    								$testexistence=mysql_fetch_row($selecdonnee);
     
    								if($testexistence == 0) {
     
    								$insertdonnees=mysql_query("INSERT INTO tab_societe (id_societe, ".$var.") VALUE ('', '".$data[$c]."')") or die(mysql_error()." sur la modif 02 enregistrement".$row);
    								}
     
    								}
     
     
    								if($c == 2)
    								{
     
    									$posvirg = strpos($data[$c], ',') ;
     
    									// on extrait le numéro // pour ne pas avoir de soucis de '
    									$numeroadresse = addslashes(substr($data[$c], 0, $posvirg));
     
    									// test pour ne pas tronquer la premiere lettre de l'adresse quand pas de numéros
    									if(substr($data[$c], 0, $posvirg) == 0) 
    									{		
    										// récupération de l'adresse
    										$adresse = addslashes(substr($data[$c], $posvirg));
    									}
    									else 
    									{
    										// récupération de l'adresse
    										$adresse = addslashes(substr($data[$c], $posvirg + 1));
    									}
     
    									//Test existence des données :
     
    								$selecdonnee2=mysql_query("SELECT * FROM tab_societe WHERE '".$var."'='".$data[$c]."' AND numero='".$numeroadresse."' AND ad2='".$adresse."' ") or die(mysql_error()."test existence2");
     
    								$testexistence2=mysql_fetch_row($selecdonnee2);
     
    								if(testexistence2 == 0) {
     
    								$selecdonnee2=mysql_query("SELECT * FROM tab_societe WHERE '".$var."'='".$data[$c]."'") or die(mysql_error()."test existence3");
     
    								$resselecdonnees=mysql_fetch_array($selecdonnee2);
     
    								$idsociete=$resselecdonnees['id_societe'];
     
    								// on modifie la table
    									$requeteupdateloc=mysql_query("UPDATE tab_societe SET numero='".$numeroadresse."', ad2='".$adresse."' WHERE id_societe='".$idsociete."'") or die(mysql_error()." sur la modif 01 enregistrement".$row);
     
    									}						
    								} //fin du if($c == 2)
     
     
     
     
     
    							} // fin du for
     
    						} //fin du while
    						fclose($handle);
    			 			$i=$i+'1';
    					}	//fin du premier if				
    					 else {
    			            echo "Le déplacement du fichier temporaire a échoué";
    				    }          
    	    		} //fin du second if
    				else {
    			       echo "Le fichier n'a pas été uploadé (trop gros ?)";
    			    }
     
     
    			}
     
     
    				 ?>
    <form enctype="multipart/form-data" action="test.php" method="post">
    			            <input type="hidden" name="MAX_FILE_SIZE" value="200000" />
    			            <input type="hidden" name="groupe" />
    			          <label id="transfert">Sélectionner le fichier CSV des Groupes et Sociétés :</label> <input type="file" name="monfichier" /><br />
    			          <label id="ok"></label>  <input type="submit" />
    </form>
    Désolée pour le pavé...

    Courage et merci à tout ceux qui auront pris le temps de m'aider !!!

  4. #4
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    Citation Envoyé par Little_flower Voir le message
    Je n'arrive pas à traiter mes insertions de données à la racine (lors de l'insert) donc je les voudrais les traiter en autmatique après...
    J'ai eu le même questionnement que toi il y a peu. Je l'ai solutionné de cette façon et cela fonctionne nickel !
    regarde ici.
    ----
    L'avenir appartient à ceux dont les salariés se lèvent tôt.

  5. #5
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2007
    Messages : 262
    Points : 172
    Points
    172
    Par défaut
    Heu...

    Pourrais-tu expliquer ton raisonnement avec les index à une débutante comme moi ?!!!

    Merci d'avance !
    En espèrant que c'est la bonne solution !!! mais ca y ressemble !

  6. #6
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    Little_flower,
    Voici en explication très grossière ce que tu dois faire pour gérer tes doublons que les autres lecteurs puristes me pardonnent:
    Un index est un moyen d'optimiser les temps d'accès à des enregistrements de table(s). Le ou les index (usage dont il ne faut pas abusé) sont a définir à la création de tes tables ou à postériori.
    Prenons un petit exemple: Ta table Sociéte par exemple risque de prendre des dimensions importante, plusieurs miliers d'enregistrements. Si tu veux éviter d'obliger le serveurs à lire un grand nombre d'enregistrements pour trouver la fiche de la société "Tartenpoint", tu dois créer un index sur le champ nom société.
    Quand tu demande au serveur de créer un index sur un champ, celui-ci cré un fichier (ou autre chose celà dépends des serveurs) qui va contenir la liste des valeurs de ce champ de façon optimisée (classée). Ce qui veut dire que quand tu lance une requête du style
    SELECT * FROM societe WHERE nom_societe LIKE 'Tarten%'
    Le serveur te retournera l'information plus rapidement et sa charge sera garce à cette technique moins importante etc...
    Pour revenir à ta problèmatique de doublons, il 'suffit' de préciser au serveur que tes index soit unique. Donc tu évite les doublons.
    Il faut que tu sache qu'il est possible d'éviter la création de doublons sur plusieurs champ (je crois que c'était ta question, si j'ai bien compris). En regardant de plus prêt l'exemple que je t'ai indiqué, tu verras que c'est axactement ce qui se passe.
    CREATE TABLE `Passage` (
    `ID_Passage` int(11) NOT NULL AUTO_INCREMENT,
    `ID_Personnel` smallint(6) NOT NULL,
    `B_Date` date NOT NULL,
    `AM` tinyint(1) NOT NULL,
    PRIMARY KEY (`ID_Passage`),
    UNIQUE KEY `Ma_Cle` (`ID_Personnel`,`B_Date`,`AM`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
    Dans ce cas, la table Passage ne peut pas contenir d'enregistrement ou les champ `ID_Personnel`,`B_Date`,`AM` sont de même valeur.

    J'espère que mes explications seront claires.
    ----
    L'avenir appartient à ceux dont les salariés se lèvent tôt.

Discussions similaires

  1. [RegEx] Expression régulière pour supprimer des doublons
    Par cbroissa dans le forum Langage
    Réponses: 5
    Dernier message: 20/05/2017, 02h59
  2. Requête pour supprimer des doublons dans une table
    Par nomade333 dans le forum Contribuez
    Réponses: 0
    Dernier message: 30/03/2008, 13h48
  3. Supprimer des doublons
    Par gta1234 dans le forum Modélisation
    Réponses: 1
    Dernier message: 16/08/2007, 21h05
  4. [Collections]Supprimer des doublons dans une ArrayList
    Par emie31 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 12/12/2005, 16h15
  5. Réponses: 2
    Dernier message: 07/07/2004, 18h44

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