Supprimer les doublons dans une table mysql automatquement

Soyez le premier à donner votre avis sur cette source.

Snippet vu 29 221 fois - Téléchargée 27 fois

Contenu du snippet

Tout est dans le titre :)
en fait, il réécrit les données dans la meme table mais sans les doublons.
c'est un code tres simple mais comme j'avais rien trouvé sur le net voila.
ca marche bien normalement : j'ai fait le test

Source / Exemple :


<?
$idConnect =mysql_connect('localhost','root','');
$db = mysql_select_db("registration");
//mysql_query(" SELECT DISTINCT id, courses, dates FROM tempcourse
$rqSql = "SELECT DISTINCT courses, dates FROM tempcourse";
$result = mysql_query( $rqSql, $idConnect);
mysql_query("DELETE FROM tempcourse"); 
while ( $row = mysql_fetch_array( $result)) {
mysql_query("INSERT INTO tempcourse (courses, dates) VALUES ('" . $row['courses'] . "', '" . $row['dates'] . "')"); 
}
?>

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
jeudi 5 juillet 2012
Statut
Membre
Dernière intervention
5 juillet 2012

Le blog suivant donne une solution basée sur la commande mySQL Alter Ignore :
http://blogmotion.fr/programmation/php-sql/supprimer-doublons-table-sql-base-suppression-1588
Messages postés
13
Date d'inscription
lundi 23 juin 2003
Statut
Membre
Dernière intervention
27 septembre 2008

Un peu décalé, mais par soucis de gain de ressources, au lieu de repeupler la table d'origine, supprimez-là puis renommez la table temporaire en table d'origine :

// Création et remplissage de la table temporaire
mysql_query("CREATE TABLE `$table_tmp` SELECT DISTINCT champ FROM `$table`");

// Suppression de la table d'origine
mysql_query("DROP TABLE `$table`");

// Renommage de la table temporaire
mysql_query("RENAME TABLE `$table_tmp` TO `$table` ;");

Gain de temps conséquent pour une grosse table.
Messages postés
33
Date d'inscription
vendredi 25 avril 2003
Statut
Membre
Dernière intervention
28 juillet 2004

Merci pour ce script,

C'est tout ce dont j'avais besoin.

J'avais copié une liste de villes avec leur code postal correspondant et je voulais créer une table "Cp" avec un clé unique.

Ce script m'a permis de passer de 35 000 enregistrements (nb de villes) à 5 000 seulement (Cp) .

Donc, merci !

Vous aurez contribué à la création du site www.co-voiturage.fr
Messages postés
28
Date d'inscription
mercredi 6 juin 2001
Statut
Membre
Dernière intervention
3 mars 2009

Salut,

En effet la définition de clés uniques et primaires constitue le meilleur moyen d'éviter les doublons. Mais s'il faut épurer une base, je pense que le plus simple(dispo dès mysql4) serait de créer une table temporaire comportant les enregistrements uniques de la table à épurer pour ensuite vider la table d'origine et réinjecter les enregistrements.

En gros, ca donnerai qqchose comme ca :
<?
$conn_db =mysql_connect('localhost','root','');
$db = mysql_select_db("MyDB");
//Création de la table temporaire
$strsql = "CREATE TABLE tabletemp SELECT DISTINCT * FROM table1";
mysql_query( $strsql, $conn_db);
//Vidage de la table d'origine
mysql_query("DELETE FROM table1", $conn_db);
//Réinjection des enregistrements
$strsql = "INSERT INTO table1 SELECT * from tabletemp";
mysql_query($strsql, $conn_db);
?>

Il faut juste remplacer le * de la première requete par les champs que l'on veut conserver comme uniques.

Bon courage
Messages postés
58
Date d'inscription
dimanche 16 mai 2004
Statut
Membre
Dernière intervention
2 septembre 2004

C'est quand même super dangereux !
Imagine que tu ai une erreur de syntaxe dans ta requête INSERT, par exemple un guillemet simple (sans gpc_magic_quotes), tu aura effacé ta table, mais ne l'aura jamais remplie... elle sera donc vide... sympathique !!
Pourquoi ne pas utiliser quelque chose comme ça :
mysql_query("ALTER TABLE `tempcourse` ADD UNIQUE(`courses`), ADD UNIQUE(`date`)");

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.