Ok oK, c'est encore mieux mon pote !!!
essaie ca :
Code:
1
2
3
4
5 sql="UPDATE maj_mesure SET $champ=(SELECT MIN(`tiers_id`) FROM t_tiers WHERE id_maj=".$d["id_maj"].") WHERE id_mesure='".$d["id_mesure"]."'";
Version imprimable
Ok oK, c'est encore mieux mon pote !!!
essaie ca :
Code:
1
2
3
4
5 sql="UPDATE maj_mesure SET $champ=(SELECT MIN(`tiers_id`) FROM t_tiers WHERE id_maj=".$d["id_maj"].") WHERE id_mesure='".$d["id_mesure"]."'";
du coup on s'en tape de faire remonter les adresses et tout et tout dans $q.
l'idée c'est de donner le plus petit id_tiers pour un même id_maj.
c'est ca?
ceci étant dit a condition que pour un même id_maj on a forcement les meme tribunaux.
sinon faut garder les adresses
Bon cette fois je suis parti a ce soir, je crois que tout est clair , je vais mieux regarder tes portions de dump, la problématique sera toute eclairci pur ajuster tout ca et que ca roule.
apparemment ilfaut peut ere tenir compte des adresses, je vois ce soir mais on est tout pret du but.
Bon id_maj n'est pas suffisant. Si on ne prend que lui comme critère, on va avoir tous les tiers d'un id_maj. On peut en avoir 100.
Donc, il faut garder le where tel qu'il était
La relation est que 1 id_maj peut avoir 1 ou plusieurs mesures, une mesure ne peut avoir qu'un id_maj.Code:
1
2
3
4
5
6 WHERE tiers_type_id='".$d["tiers_type_id"]."' AND tiers_nom='".addslashes($d["tiers_nom"])."' AND tiers_adr1='".addslashes($d["tiers_adr1"])."' AND tiers_adr2='".addslashes($d["tiers_adr2"])."' AND tiers_adr3='".addslashes($d["tiers_adr3"])."' AND b.id_maj=".$d["id_maj"]."
La relation est que 1 id_maj peut avoir 1 ou plusieurs tiers, un tiers ne peut avoir qu'un id_maj
salut Pierre,
temps chaud, eau bleue et belle mais aux propriétés rétractiles certaines pour tout orgueil masculin.
je précise 16°c
mais çà fait du bien.
Bref,
bon résumons nous, d'après ce que j'ai compris j'en suis là:
ca ca veut dire :Code:
1
2
3
4
5
6
7
8
9
10
11
12 <?php $sql="UPDATE maj_mesure SET $champ=(SELECT MIN(`tiers_id`) FROM t_tiers WHERE tiers_nom='".addslashes($d["tiers_nom"])."' AND tiers_adr1='".addslashes($d["tiers_adr1"])."' AND tiers_adr2='".addslashes($d["tiers_adr2"])."' AND tiers_adr3='".addslashes($d["tiers_adr3"])."' AND b.id_maj=".$d["id_maj"]."id_maj=".$d["id_maj"].") WHERE id_mesure='".$d["id_mesure"]."'"; ?>
"pour cet id_mesure courant, tu affecte à "mesure_tribunal_ouvert" (par exemple, selon ou on est dans le foreach bien sur) le plus petit id_tiers, ayant le même id_maj, et les mêmes adresses (= la même combinaison de valeur faisant doublon)."
ca tient la route comme raisonnement ? vu qu'on a l'id_maj dans t_tiers, je ne m'enquiquine plus avec la jointure.
donc logiquement nos deux id_maj 98 se retrouveront bien avec le 10623 comme requis par ta capture.
soit le plus petit id_tiers ayant le même id_maj et les mêmes valeurs de doublons.
Si ca marche pas comme çà je tue le chat.
J'ai retirer des choses :
Il y avait "b." et 2 fois la comparaison sur l'id_maj, je testeCode:
1
2
3
4
5
6
7
8
9 $sql="UPDATE maj_mesure SET $champ=(SELECT MIN(`tiers_id`) FROM t_tiers WHERE tiers_nom='".addslashes($d["tiers_nom"])."' AND tiers_adr1='".addslashes($d["tiers_adr1"])."' AND tiers_adr2='".addslashes($d["tiers_adr2"])."' AND tiers_adr3='".addslashes($d["tiers_adr3"])."' AND id_maj=".$d["id_maj"].") WHERE id_mesure='".$d["id_mesure"]."'";
Ouha ! Premier pointage ça à l'air de fonctionner top.
Je continus le pointage.
Le traitement est long.
Pour la suppression ensuite, j'ai l'intention de supprimer les tribunaux qui ne sont pas en relation avec une mesure.
Pour les autres doublons des tiers qui ne sont pas en relation avec une autre table, il suffit de comparer les 5 champs tiers_type_id, tiers_nom et tiers_adr1/2/3
Bon, le traitement vient de finir, je pointe
Et ne parles-plus de la belle bleu et de ces vertus ...
Salut,
merde excuse pour les déchets laissés dans la requete.
j'avais la tete encore un peu froide , c'est que 16°C tu sais ... oups.
Bonjour Gisèle,
Dure journée, ça y est je me remets au travail, les réunions c'est à mourir et pas de plaisir.
Bon c'est ok, j'ai pu faire le traitement sur les mesures.
Je lance le marquage des tiers sur mesure non utile.
Bonjour,
Bon, j'ai récupéré ce qu'il y avait dans le forum et que l'on m'avait transmis précédemment dans ce poste sur la suppression de doublons pur.
J'ai adapté le code pour mon cas et cela semble fonctionner
Maintenant il faut que je cherche les quasi doublon.Code:
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 <?php mysql_connect("localhost", "root", ""); mysql_select_db("doublons"); $table="t_tiers"; //============================================================ // RECUPERE LES CHAMPS DE LA TABLE //============================================================ $champs=Array(); $sql="SHOW COLUMNS FROM `".$table."`;"; $res=@mysql_query($sql); if(!$res) die('Impossible d\'éxécuter la requête !<br>'.@mysql_error()); while($row=mysql_fetch_array($res)) $champs[]=$row['Field']; $cnt_champs=count($champs); if($cnt_champs<=0) die('Champs introuvable dans la table "'.$table.'" !'); //============================================================ // RECUPERE LE NOMBRE D'ENREGISTRMENT //============================================================ $sql="SELECT * FROM `".$table."`"; $res=@mysql_query($sql); $num_rows=@mysql_num_rows($res); if(!$res || $num_rows<=0) die('Impossible d\'éxécuter la requête !<br>'.@mysql_error()); //============================================================ // POUR CHAQUE ENREGISTREMENT, VEREFIER SI DOUBLON //============================================================ while($row=@mysql_fetch_array($res)){ $sql="SELECT * FROM `".$table."` WHERE id_maj='".$row[$champs[0]]."' AND tiers_type_id='".$row[$champs[2]]."' AND tiers_nom='".$row[$champs[4]]."' AND tiers_prenom='' AND tiers_adr1='".$row[$champs[6]]."' AND tiers_adr2='".$row[$champs[7]]."' AND tiers_adr3='".$row[$champs[8]]."' ORDER BY tiers_type_id='".$row[$champs[2]]."' AND tiers_nom='".$row[$champs[4]]."' AND tiers_prenom='' AND tiers_adr1='".$row[$champs[6]]."' AND tiers_adr2='".$row[$champs[7]]."' AND tiers_adr3='".$row[$champs[8]]."'"; $res2=@mysql_query($sql); $num_rows2=@mysql_num_rows($res2); if($num_rows2>1){ $first=true; while($row2=@mysql_fetch_array($res2)){ if(!$first){ //==================================================== // SUPPRESSION DES DOUBLONS //==================================================== $sql="DELETE FROM `".$table."` WHERE tiers_id='".$row2[$champs[0]]."'"; $res3=@mysql_query($sql); if(!$res3) die('Impossible d\'éxécuter la requête !<br>'.@mysql_error()); echo 'Enregistrement '.$row2[$champs[0]].' supprimé.<br>'; } $first=false; } } } die('Opération terminée.<br>'); ?>