IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Doublons quelle horreur [MySQL]


Sujet :

PHP & Base de données

  1. #41
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 102
    Points : 120
    Points
    120
    Par défaut
    Ok oK, c'est encore mieux mon pote !!!

    essaie ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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"]."'";
    il n'y a pas de sotte existence

  2. #42
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 102
    Points : 120
    Points
    120
    Par défaut
    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
    il n'y a pas de sotte existence

  3. #43
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 102
    Points : 120
    Points
    120
    Par défaut
    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.
    il n'y a pas de sotte existence

  4. #44
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 mesures, une mesure ne peut avoir qu'un id_maj.

    La relation est que 1 id_maj peut avoir 1 ou plusieurs tiers, un tiers ne peut avoir qu'un id_maj
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  5. #45
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 102
    Points : 120
    Points
    120
    Par défaut
    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à:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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"]."'";
    ?>
    ca ca veut dire :
    "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.
    il n'y a pas de sotte existence

  6. #46
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    J'ai retirer des choses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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"]."'";
    Il y avait "b." et 2 fois la comparaison sur l'id_maj, je teste
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  7. #47
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    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 ...
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  8. #48
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 102
    Points : 120
    Points
    120
    Par défaut
    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.
    il n'y a pas de sotte existence

  9. #49
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    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.
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  10. #50
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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>');
     
    ?>
    Maintenant il faut que je cherche les quasi doublon.
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. Réponses: 11
    Dernier message: 09/08/2006, 21h46
  2. Réponses: 4
    Dernier message: 02/05/2006, 12h08
  3. Réponses: 4
    Dernier message: 10/03/2005, 14h10
  4. Quelle est la fiabilité du protocole SSL ?
    Par Anonymous dans le forum Développement
    Réponses: 5
    Dernier message: 05/09/2002, 13h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo