Update & Doublon

Nathalie06
Invité n'ayant pas de compte PHPfrance

12 oct. 2009, 13:23

Bonjour,

Je vous presente rapidement mon probleme.

J'ai 1 table avec 2 champs (Id - email)
Le champ email est unique donc pas de doublon sur ce champ

exemple :
12 [email protected]
15 [email protected]
18 [email protected]


Je veux maintenant mettre à jour le champ email, c'est à dire remplacer toute les adresses chez

caramail.com par aol.com
Dans mon cas l'enregistrement N°12 doit passer à [email protected]

Mais voila que des doublons vont alors apparaître (12 et 18 seraient alors identique)
Je dois alors supprimer l'un des deux enregistrements. Peut importe lequel.

J'ai tenté la requête suivante mais me renvoie une erreur pour chaque doublon
UPDATE matable SET mail = REPLACE(email,'caramail.com','aol.com')
Comment modifier la requête afin d'eliminer les doublons lors de l'update ??


Cordialement,
Nathalie06

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

12 oct. 2009, 15:39

Bonjour,

Moi je lèverai la contrainte d'unicité, puis j'appliquerai le remplacement et ensuite je recherchai les doublons pour corriger/supprimer ceux-ci.
Bien sûr à la fin du traitement, il faut remettre la contrainte d'unicité :)
Quand tout le reste a échoué, lisez le mode d'emploi...

Nathalie06
Invité n'ayant pas de compte PHPfrance

12 oct. 2009, 16:30

OK @rthur, merci pour ta proposition.

Si qqun d'autre à mieux qu'il n'hésite pas

@++ Nathalie

Mammouth du PHP | 881 Messages

12 oct. 2009, 17:22

Si tu fais ton remplacement comme tu le dis, il y aura des changements impossibles, comme tu le dis aussi. Ces changements impossibles, sont simplement les doublons. Tu n'as alors qu'à éliminer tout ce qui s'appelle [email protected], qui restent après avoir appliqué ton opération.

Ton opération aurait fait les changements nécessaires, ce qui reste n'est que doublon et peut être éliminé.
Soyez artisans de paix

ViPHP
AB
ViPHP | 5818 Messages

12 oct. 2009, 19:14

Pour que la technique indiquée par Patriboom puisse fonctionner il faudra spécifier le mot clef "IGNORE" dans ta requête d'update, sinon l'update s'arrêtera au premier doublon rencontré.

Note : Pour suivre ton exemple Patriboom aurait dû dire "Tu n'as alors qu'à éliminer tout ce qui s'appelle xyz@caramail.com". Je précise au cas où cette petite erreur t'aurait fait perdre l'intérêt de son message.

Nathalie06
Invité n'ayant pas de compte PHPfrance

13 oct. 2009, 12:18

Re... Bonjour,

J'ai fait la mise à jour entre temps.

Je prends note de vos remarques.
La prochaine fois je tente avec update ignore ...... , et suppression des doublons.
L'idée me semble pas mal du tout.

Merci
Nathalie