Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1295 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MYSQL] Update un peu tordu

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MYSQL] Update un peu tordu

n°1591279
Icebird
Posté le 25-07-2007 à 12:36:00  profilanswer
 

Bonjour,
 
Je cherche à faire un dédoublonnage sur une table d'appelant. C'est à dire que je trouve tous les doublons, je met à jour les infos entre ces doublons, et je supprime les surnuméraires. Par doublons, j'entend des appelants avec le même nom, prénom, et numéro de téléphone. Ces doublons sont souvent créés par erreur par une opératrice qui recrée un appelant, parfois avec des infos supplémentaires (adresse, numéro de portable) au lieu de mettre à jour l'ancien appelant.
 
Je doit donc trouver toutes les lignes avec le même nom et n° de tel, et, pour chaque champ, le mettre à jour à partir des autres doublons si le champ d'origine est vide ou qu'un champ renseigné modifié plus recemment existe.
 
Pour ce qui est de la suppression en elle-même, je n'y suis pas et de toute façon je ne m'en fait pas. Mes premiers tests de suppression fonctionnent. Mon problème, c'est la mise à jour des doublons entre eux. Je n'y arrive pas correctement!!!!
 
Voici ma requète actuelle (je ne m'occupe que d'un seul champ pour le moment):
 
UPDATE cl_appelants AS T1
INNER JOIN cl_appelants AS T2
ON T1.NomAppelant = T2.NomAppelant
   AND T1.Tel1 = T2.Tel1
   AND T1.NumAppelant<>T2.NumAppelant
SET
T1.Rue1=IF(T2.Rue1<>'',IF(T1.Rue1='',T2.Rue1,IF(T2.Modif>T1.Modif,T2.Rue1,T1.Rue1)),T1.Rue1)
 
Les IF imbriqués me permettent normalement de définir si il faut mettre le champ à jour ou pas. Donc SI le champ source n'est pas vide ET (SI le champ à modifier est vide OU SI le champ source a été modifié plus recemment que le champ à modifier)
 
Pour mes tests, j'ai créé 5 doublons. Si je change la valeur du champ du premier doublon, la requete met bien à jour les 4 autres. Si je change la valeur du deuxième doublon, seule la valeur du premier doublon est modifié... Si je change n'importe quel autre doublon, rien ne se passe...
 
Je ne comprend pas pourquoi çà réagit ainsi!!! Alors évidement, dans 90% des cas il n'y aura que deux doublons, et cette requète fonctionnerait. Mais je doit prévoir les cas plus rares avec des doublons multiples, et là je m'en sort pas, mes doublons ne se mettent pas à jour entre eux correctement.
 
Quelqu'un à une idée?

mood
Publicité
Posté le 25-07-2007 à 12:36:00  profilanswer
 

n°1591710
Icebird
Posté le 26-07-2007 à 11:27:59  profilanswer
 

vraiment personne avec une idée pour me sortir de là?

n°1837060
Omniscienc​e
S.M.B.
Posté le 12-01-2009 à 19:31:09  profilanswer
 

Petit up vu que j'ai le même problème.
 
Merci :)

n°1837088
omega2
Posté le 12-01-2009 à 21:04:38  profilanswer
 

Je sais, je réponds en retard mais peut être que ça t'aidera pour le prochain coup.
 
Ton ensemble de condition me semble bien compliqué. Vu que tu supprimes le second doublon, tu t'en fiches si tu le modifies sauf si le disque est trop lent. Ca permet déjà de simplifier en virant la condition "T2.Modif>T1.Modif". Ensuite, la condition restant correspond à un "si j'ai rien, je met quelque chose". Rien peut être considéré comme vide ou null. Mysql a tout ce qu'il faut pour ça.
 
Au final on peut s'en sortir avec un simple "SET
T1.Rue1=IFNULL(NULLIF(T1.Rue1,"" ),T2.Rue1)".  
 
 
Omniscience > Décrit mieux ton problème, en fonction des éléments qui différent, la solution la plus simple n'est pas forcément la même.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MYSQL] Update un peu tordu

 

Sujets relatifs
MySQL: UTF8 vs. latin_swedish & error 1406[VB 2005] Utilisation de Base de donnée MySQL
mysql 5[PHP/MySQL] Automatisation convertion xls -> csv pour update BDD (en p
Un logiciel pour administrer une base de donnée MySQL ?[Résolu] Lancement script avec MySQL Query Browser
Pb d'insertion CSV dans MySQLcomment faire valider un site contenant du php et du mysql
Syncrhoniser deux bases mysql 
Plus de sujets relatifs à : [MYSQL] Update un peu tordu


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR