Vous êtes ici Codes PHP et MySQL > MySQL > Connaitre et supprimer les doublons dans une table...

 

Connaitre et supprimer les doublons dans une table SQL

Ce code va vous montrer ou se trouve les doublons dans votre table. A chaque doublon trouvé un lien va s'afficher ou vous pourrez supprimer le doublon.
Ce code ne nettoie pas massivement mais individuellement chaque enregistrement.
Si votre table fait + de 10 000 enregistrements, alors pour dedoublonner la table, je vous conseil de ne pas utiliser ce code, mais de faire une copie de votre table ou les champs à dedoublonner seront passés en valeur UNIQUE dans la table, ce qui dedoublonnera la table.
 
KOogar
Site de l'auteur voir
[65] sources en PHP voir
Code vu 6952 fois
Enregistré le 12 Jan 2009
  • Digg ce code sur digg.com
  • Bookmark ce code sur del.icio.us
  • Bookmark ce code sur Google
  • Bookmark ce code sur Yahoo
  • Ajoute Connaitre et supprimer les doublons dans une table SQL
  • Partage ce code sur Facebook
 
 
 
 

Code Source


01.
02.
03.
04.
05.
06.
07.
08.
09.
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.
 
<?php
/******************************************************************************/
/*                                                                            */
/*                       __        ____                                       */
/*                 ___  / /  ___  / __/__  __ _____________ ___               */
/*                / _ \/ _ \/ _ \_\ \/ _ \/ // / __/ __/ -_|_-<               */
/*               / .__/_//_/ .__/___/\___/\_,_/_/  \__/\__/___/               */
/*              /_/       /_/                                                 */
/*                                                                            */
/*                                                                            */
/******************************************************************************/
/*                                                                            */
/* Titre          : Connaitre et supprimer les doublons dans une table SQL    */
/*                                                                            */
/* URL            : http://www.phpsources.org/scripts487-PHP.htm              */
/* Auteur         : KOogar                                                    */
/* Date édition   : 12 Jan 2009                                               */
/* Website auteur : http://www.koogar.fr                                      */
/*                                                                            */
/******************************************************************************/


/*******************************************************************************
    * connection sql  + valeur de la table
    ***************************************************************************/

$link mysql_connect("","","")
or die("Excusez nous mais la connection est interrompue pour quelques instants.");
mysql_select_db("",$link);


$table_sql "";           // nom de la table sql
$champ_id  "";           // nom de votre identifiant (id,idx...
$champ_recherche_sql ""// nom du champ sur lequel on effectue la
                           // recherche


/*******************************************************************************
    * suppression des doublons
    ***************************************************************************/

if ($_GET['sup'] == 'ok')
{
$idx trim($_GET['id']);
mysql_query("DELETE FROM $table_sql WHERE `$table_sql`.`$champ_id`='$idx'",$link);
echo '<font color="red">Suppression terminé !!</font> <br />';
}


/*******************************************************************************
    * place tous les champs neccessaires de la table dans un tableau
    ***************************************************************************/

$tab_match = array();
$tab_match_copie  = array();
$q mysql_query("SELECT $champ_id,$champ_recherche_sql FROM $table_sql",$link);
     $i=0;
 
     $tab_match  = array();
     while ($r mysql_fetch_array($q)) {
            $tab_match[$i] = trim(strtolower($r[$champ_id]));
            $i++;
            // Place tous les mots d'une chaine dans un tableau
            $tab_match[$i] = trim(strtolower($r[$champ_recherche_sql]));
            $i++;
            }

      $tab_match_copie $tab_match;


/*******************************************************************************
    * l'algo
    ***************************************************************************/

  $i 1;
   while ($i sizeof($tab_match))  {
    // on prend un champ du tableau
    $check $tab_match[$i];
    $j 1;
    $duplicate 0;
    while ($j sizeof($tab_match_copie))  {
    if ($check == $tab_match_copie[$j]) {
    $duplicate++;
      if ($duplicate == AND $tab_match_copie[$j-1] != $tab_match[$i-1]) {
echo'duplicate : '.$check.' - id:'.$tab_match_copie[$j-1].' avec '.$tab_match[$i-1].'';
echo'<a href="'.$_SERVER['PHP_SELF'].'?sup=ok&id='.$tab_match_copie[$j-1].'">Sup</a>';
      }
     }
    $j =$j 2;
    }
    $i $i 2;
    }

?>

 

Fonctions du code

: Ouvre une connexion à un serveur MySQL - (PHP 4, PHP 5, PECL mysql:1.0)
: Alias de la fonction exit() - (PHP 4, PHP 5)
: Sélectionne une base de données MySQL - (PHP 4, PHP 5, PECL mysql:1.0)
: - (PHP 4, PHP 5)
: Envoie une requête à un serveur MySQL - (PHP 4, PHP 5, PECL mysql:1.0)
: Affiche une chaîne de caractères - (PHP 4, PHP 5)
: Crée un tableau - (PHP 4, PHP 5)
: - (PHP 4, PHP 5, PECL mysql:1.0)
: Renvoie une chaîne en minuscules - (PHP 4, PHP 5)
: Alias de count() - (PHP 4, PHP 5)
Commentaire
Question pour alléger le code ne vaudrait il pas mieux faire travailler le SGBD que de faire travailler le serveur papache ?
avec au lieu de


Code:
SELECT $champ_id,$champ_recherche_sql FROM $table_sql

cette requête


Code:
SELECT count($champ_id),$champ_recherche_sql
FROM $table_sql
GROUP BY $champ_recherche_sql
HAVING count($champ_id)>2

Cette dernière requête ne ramènera que les $champ_recherche_sql présent plus d'une fois dans la table
par contre on ne connait pas les différent $champ_id
Voili voila.
 
Ajouter un commentaire
Code de sécurité

Attention: Les champs marqués d'une étoile * sont obligatoires
 
Librairie PHP

Connexion

 
 

MySQL

 
 

PHP

 
 
 
Dynamisez PHP 5 Livre PHP

Dynamisez PHP 5
 
    Offres d'emploi

Plus de 500 offres d'emploi PHP/MySQL

Offres d'emploi
 
    Editeur PHP
 
        Publicité