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. #1
    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 Doublons quelle horreur
    Bonjour,

    Je travaille avec php et mysql.

    J'ai une base de test que j'ai récupé d'une feuille calc.

    Dans cette base j'ai des tiers avec des doublons, c'est à dire un même code tiers avec la même adresse. Un tiers est rataché à un dossier et la relation est 1-1/n-1

    J'ai fait un programme lisant ma table tiers et écrivant dans 1 table doublon et 1 table rejet. L'enregistrement dans la table doublon doit se créer si ce que je rec herche n'existe pas et si cel existe, l'enregistrement va dans la table rejet.

    Mais rien ne va dans la table rejet.

    J'ai fait un test sur un tiers et j'ai 5 lignes en doublons dedans, donc normalement j'aurai dû avoir 4 lignes dans rejet, mais je n'ai rien.

    Voisi mon code
    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
    <?php
    mysql_connect("localhost", "root", "");
    mysql_select_db("doublons");
     
    $query='SELECT *
    		FROM `t_tiers`
    		where id_maj="98"
    		order by id_maj, tiers_type_id, tiers_nom, tiers_adr1, tiers_adr2, tiers_adr3';
     
     
     
    if($result=mysql_query($query))
    {
    	while($ligne=mysql_fetch_array($result))
    	{
     
    		// contrôle que l'enregistrement avec ce majeur, ce type de tiers, cette rue1,2,3 n'existe pas dans la table de sortie
    		$req="SELECT * from t_tiers_doublons where id_maj='98' 
    											   and tiers_type_id='$ligne[2]'
    											   and tiers_type_id='$ligne[4]'  
    											   and tiers_adr1='$ligne[6]'
    											   and tiers_adr2='$ligne[7]'
    											   and tiers_adr3='$ligne[8]'";
     
    		if($val = mysql_query($req))
    		{
    		// ajout dans la table tiers_doublon avec le même tiers_id qu'à l'origine
    		$doublon="INSERT INTO `t_tiers_doublons` ( `tiers_id` , `id_maj` , `tiers_type_id` , `tiers_titre_id` , `tiers_nom` , `tiers_prenom` ,`tiers_adr1` , `tiers_adr2` , `tiers_adr3` , `tiers_ville_id` , `tiers_tel` , `tiers_fax` , `tiers_email` , `tiers_web` ,`tiers_commentaire` , `tiers_ref_courrier` , `tiers_nom_j_fille` )
    				  VALUES ('$ligne[0]', '$ligne[1]','$ligne[2]', '$ligne[3]','$ligne[4]', '$ligne[5]','$ligne[6]', '$ligne[7]', '$ligne[8]','$ligne[9]', '$ligne[10]','$ligne[11]','$ligne[12]','$ligne[13]', '$ligne[14]', '$ligne[15]','$ligne[16]')";
     
    		$val = mysql_query($doublon);
    		}
    		else
    		{
    		// ajout dans la table tiers_rejet avec le même tiers_id qu'à l'origine
    		$rejet="INSERT INTO `t_tiers_rejet` ( `tiers_id` , `id_maj` , `tiers_type_id` , `tiers_titre_id` , `tiers_nom` , `tiers_prenom` ,`tiers_adr1` , `tiers_adr2` , `tiers_adr3` , `tiers_ville_id` , `tiers_tel` , `tiers_fax` , `tiers_email` , `tiers_web` ,`tiers_commentaire` , `tiers_ref_courrier` , `tiers_nom_j_fille` )
    				VALUES ('$ligne[0]', '$ligne[1]','$ligne[2]', '$ligne[3]','$ligne[4]', '$ligne[5]','$ligne[6]', '$ligne[7]', '$ligne[8]','$ligne[9]', '$ligne[10]','$ligne[11]','$ligne[12]','$ligne[13]', '$ligne[14]', '$ligne[15]','$ligne[16]')";
     
     
    		$val = mysql_query($rejet);
    		}
     
    	}
    }
    ?>
    Merci d'avance
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  2. #2
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    T'aurais pas inversé les conditions là (j'ai l'impression que si l'enregistrement existe tu le mets dans doublon et pas dans rejet)...
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  3. #3
    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
    Peut-être, mais si c'était le cas j'aurais trop de rejet, donc ma question serait simplement inversée.

    Là j'ai tout dans doublon et rien dans rejet alors que je devrai en avoir dans les 2.
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  4. #4
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Ca serait bien de savoir quand même, c'est en avancant pas à pas qu'on va y arriver...

    Au passage tu pourrais simplifier le code vu que $doublon et $rejet sont les même requêtes à la table près... Et le SELECT * est contre-indiqué, surtout que tu veux juste savoir si il y a un enregistrement ou pas, c'est plus logique d'utiliser mysql_num_rows.

    Edit : le souci c'est que mysql_query te renvoie une ressource, donc qui est toujours TRUE dans ta condition, il faut que tu fasses le mysql_query puis que tu testes la ressource résultat avec mysql_num_rows comme je te l'ai dit.
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  5. #5
    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, j'ai réfléchi un peu à mon problème.

    Comme les données de ma table (t_tiers_doublon) que je dois dédoublonné peuvent être utilisé par d'autres tables j'ai commencé par lire chacune de mes tables ayant un lien avec t_table_doublon et marqué chacun des enregistrements lié.

    Je me suis dit ceux là au moins ne sont pas supprimable.

    J'ai lancé une requête pour voir si sur les enregistrements marqués il n'y avait pas de doublon.

    .....

    Horreur, il y en a

    Ben c'est quoi ça ?

    Je recherche et je me rends compte qu'effectivement des utilisateurs ne souhaitant pas chercher dans une table ont préférés ajouter un enregistrement.

    Alors, je n'ai plus qu'à ...

    Comment faire pour dire aux tables :

    Regardes, tu pointes sur un doublon, change ton lien pour le 1er.

    Une idée ?
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    c bien que tu ai refléchi mes repond aux personne qui ont voulu taider aussi...

    pasque ton code as un souci voir post de jwhite
    Stay in Bed .. Save Energy

  7. #7
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Citation Envoyé par boo64
    c bien que tu ai refléchi mes repond aux personne qui ont voulu taider aussi...

    pasque ton code as un souci voir post de jwhite
    Merci Boo (le genre de truc qui me...)
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    oui je sais j'ai pris les devant surtout que c'est une grosse erreur..
    Stay in Bed .. Save Energy

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 105
    Points : 84
    Points
    84
    Par défaut
    et si tu veut eviuté des doublon dans une requete tu mets un distinct(nom_du_qui_ne_doit_pas_avoir_de_doublon) dans le select

    jj

  10. #10
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Salut!

    Je ne sais pas si cela te servira ou pas...
    Voici un sujet dans lequel je traite de la suppression des doublons d'une bdd :
    http://www.developpez.net/forums/sho...php?t=68577#10

    à+
    De retour parmis vous après 10 ans!!

  11. #11
    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 tous,


    as tu réglé çà ?

    Comment faire pour dire aux tables :

    Regardes, tu pointes sur un doublon, change ton lien pour le 1er.
    Il est techniquement possible (moyennant requete UPDATE avec jointure) d'updater les tables qui ont des références sur des doublons afin qu'elles pointent sur le bon enregistrement.


    Tu pourrait faire un point sur les solutions proposées ci-dessus?

    es tu décédé?
    peut être suite à un assaut meutriers d'une meutes d'horribles de doublons?
    il n'y a pas de sotte existence

  12. #12
    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
    Coucou,

    Ben non je ne suis pas mort.

    Une Urgence m'a empêché de suivre ce post.

    Bon je mis remet

    Merci pour cette joute, pour ce sentiment d'abandon de certains, je ne vous avais pas oublié.

    Laissez moi le temps de tout lire et de faire quelques essais et je reviens....

    A tout à l'heure
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  13. #13
    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
    Merci subo, Merci à tous

    Il y a plein de choses sur la suppression des doublons dans une table. Mais je ne trouve rien sur la supression des doublons dans une table en relation avec une autre.

    Il faudrait que j'arrive à ne traiter que les doublons de ceux qui ne sont pas utilisé dans d'autres tables.

    Oui mais dans mes tables liés c'est un peu le b...

    Bon, j'ai une table de mesure juridique avec pour chaque enregistrement 3 champs de tribunaux
    Le tribunal d'ouverture
    Le tribunal de jugement
    Le tribunal de désignation

    Le tribunal est un tiers qui se trouve dans la table des tiers.

    Le problème est que mes 3 tribunaux peuvent être le même et que dans ce cas dans mon enregistrement de mesures j'ai ... non non pas 3 fois le même, mais 3 différents. A l'histoire des données c'est parfois un poème.

    Donc, j'ai fait un php qui
    1) lit les mesures et pour chaque tribunal va marquer la table des tiers pour lui dire, celui là m'intéresse
    2) lit les tiers, fait une boucle de regroupement sur 5 champs qui définissent les doublons. Garde le 1er code tiers du groupe en référence, puis pour chacun des enregistrements du groupe va lire la table mesure et change le code tiers existant par le 1er code tiers.
    3) relit les mesures et pour chaque tribunal va marquer la table des tiers pour lui dire, celui là m'intéresse. Le marquage est différent que le point 1
    4) supprime tous les tiers en doublon qui n'ont pas de marquage de type étape 3

    Euh, voilà.

    Ai-je été clair ?

    Vous en pensez quoi, est-ce une bonne méthode ?

    Merci
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  14. #14
    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,

    moi ce que je peux te proposer c'est une requete UPDATE avec jointure entre tables liées.
    du genre UPDATE TABLE_LIEE JOIN TABLE_CODE USING(code) SET CODE = BON_CODE.
    Elles donnerait dans les tables qui utilise les mauvaise références, au champ qui qui les lie la valeur du premier code tiers, cad a dire le code reference cad le bon a la place du code du doublon a lourder ensuite.
    ca libérerait la totalité des doublons en vue de leur suppression.

    a ce propros ce qu'il est interressant de faire pour la table qui stockerait les doublons, c'est de rajouter si cela n'est fait un champ ou tu pourrait y consigner le code dont elle est le doublon c'esta dire le code du tiers que reference que tu souhaire conserver, afin de faciliter une solution SQL d'échange de code.

    Bon la je vais fermer le rideau pour la soirée mais si t'es interressé, donne juste la structure des tables concernée, un exemple de doublon.
    (un select de tous les champs une ligne référence et un de ses doublons).
    et cela permettra demain de réfléchir sur la requete qui donnera aux tables liées a des doublons le bon code.
    il n'y a pas de sotte existence

  15. #15
    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
    Monsieur Gisele bonjour,

    J'ai aussi fermé le rideau hier soir.

    Voici la structure de 2 tables

    Table mesure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    `maj_mesure` ( `id_mesure` , `id_maj` , `mesure_type_id` , `mesure_tribunal_ouvert` , `mesure_date_jugement` , `mesure_date_attnot_alerte` , `mesure_attnot_alerte_mail` , `mesure_date_notification` , `mesure_date_transfert` , `mesure_date_cert_non_recours` , `mesure_reference_tribunal` , `mesure_date_cpte_rendu_gest` , `mesure_duree` , `mesure_dat_fin_mesure` , `mesure_dat_fin_mesure_alerte` , `mesure_fin_alerte_mail` , `mesure_tuteur_id` , `mesure_date_ouverture` , `mesure_execution` , `mesure_tribunal_design` , `mesure_tribunal_atmp` )
    Les champs liés sont
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    `mesure_tribunal_ouvert`, `mesure_tribunal_design` , `mesure_tribunal_atmp`
    Table tiers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    `t_tiers` ( `tiers_id` , `id_maj` , `tiers_type_id` , `tiers_titre_id` , `tiers_nom` , `tiers_prenom` , `tiers_adr1` , `tiers_adr2` , `tiers_adr3` , `tiers_ville_id` , `tiers_tel` , `tiers_fax` , `tiers_email` , `tiers_web` , `tiers_commentaire` , `tiers_ref_courrier` , `tiers_nom_j_fille` , `id_trt` )
    La clé est Les mesures et les tiers sont associés à un dossier dont le champ de référence est Les relations sont que pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1 dossier, il peut y avoir n mesures et n tiers
    1 mesure, il peut y avoir qu'un dosser et 1 seul
    1 tiers, il peut y avoir qu'un dossier et 1 seul
    Je joins 1 extrait de chaque table

    Les doublons sont à chasser de la table des tiers. La définition de doublons porte sur les champs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tiers_type_id, tiers_nom, tiers_adr1, tiers_adr2, tiers_adr3
    Merci
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  16. #16
    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,
    Voici un script qui génère les requetes de mise a jour de la table mesure.
    celles qui donneront à chacun des 3 champs leur bon tiers_id correspondant, le premier, celui qui correspond aux entrées que tu vas conserver dans tiers.
    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
     
    <?php
    //je crée un tableau des3 champs liees de la table mesure a passer en revue et updater
    $champs_lies = array("`mesure_tribunal_ouvert`", "`mesure_tribunal_design`" , "`mesure_tribunal_atmp`");
    //j'engage une boucle pour faire toute l'action  ci-dessous successivement sur pour chacun des 3 champs
    foreach($champs_lies as $champ)
    {
    	//recupere tous les féréence a tiers dans mesure (pour le nom de champ courant)
    	// de la table mesure + leurs données liées et doublonnées dans la tabe tiers
    	$q = "SELECT ".$champ.", tiers_type_id, tiers_nom, tiers_adr1, tiers_adr2, tiers_adr3";
    	$q .= " FROM mesure JOIN tiers ON(".$champ." = `tiers_id`)";
    	$r = mysql_query($q) or die(mysql_error()."<br />".$q);
    	//pour chaque ligne trouver j'affiche la requete update adéquate 
    	//(qui update le champcouranr du meilleur tiers_id possible)
    	while($d = mysql_fetch_assoc($r))
    	{
    		echo "UPDATE mesure SET ".$champ."=(SELECT MIN(`tiers_id`) FROM tiers";
    		echo " WHERE tiers_type_id='".$d["tiers_type_id"]."' AND tiers_nom='".addslashes($d["tiers_type_id"])."'";
    		echo " AND tiers_adr1='".addslashes($d["tiers_adr"])."' AND tiers_adr2='".addslashes($d["tiers_adr"])."'";
    		echo " AND tiers_adr3='".addslashes($d["tiers_adr"])."')<br />\n";
    	}
    }
    ?>
    Voilà en gros je fabrique des requete update qui disent :
    "remplace ce champ (`mesure_tribunal_ouvert` ou `mesure_tribunal_design` ou`mesure_tribunal_atmp`) par le plus petit tiers_id (cad le premier, celui que je garde) dont les champs a doublons sont les même".

    Tu peux lancer sans crainte se script via un browser html, il ne fait pas d'écritures en base, il affiche juste les update pour que tu vois la gueule des bestioles :-) avant

    rassures toi, les 3 champs de "mesure" sont bel et bien traités séparément, cad dire que si ils se réfèrent a des doublons qui s'avèrent etre les même, ils se retouveront fatalement avec le même tiers_id de base.
    Mais si ils se réfèrent a des infos diiférentes, ils se verront forcément affecter un tiers_id de base différent, chacun le leur.

    ensuite, fait un dump de ta table mesure afin de pouvoir la restaurer en cas de pb et lance les requetes.

    tiens moi au courant, apres si tu veux je te donne la bonne requete pour supprimer la totalité des doublons vus qu'ils seront libérés de toute liaison ;-)
    il n'y a pas de sotte existence

  17. #17
    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
    Merci

    J'ai lu, 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.

  18. #18
    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
    oups, pense a rajouter le ";" entre la fin de chaque requete affichée et le <br /> (dans boucle while), afin de séparer les requetes sinon ca va gueuler en base des la 2eme requete, si tu patate un copie collé de la page obtenu dans ton PHPMyAdmin.
    il n'y a pas de sotte existence

  19. #19
    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 fait quelques modifications :

    Je part de la table mesure et pour chaque mesure, j'alimente le tableau champ des 3 tribunaux qui s'y trouve.

    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
    <?php
    mysql_connect("localhost", "root", "");
    mysql_select_db("doublons");
     
    // Je lis la table mesure
    $query='SELECT *
    	FROM `maj_mesure`
    	where id_maj="98" or id_maj="49"
    	order by id_maj';
     
    if($result=mysql_query($query))
    {
    	while($ligne=mysql_fetch_array($result))
    	{
     
    		//je crée un tableau des 3 champs liees de la table mesure a passer en revue et updater
    		$champs_lies = array($ligne[3], $ligne[19] , $ligne[20]);
    		$i=1;
    		//j'engage une boucle pour faire toute l'action  ci-dessous successivement sur chacun des 3 champs
    		foreach($champs_lies as $champ)
    		{
     
    			// récupère toutes les références à tiers dans mesure (pour le nom de champ courant)
    			// de la table mesure + leurs données liées et doublonnées dans la tabe tiers
    			$q = "SELECT ".$champ.", tiers_type_id, tiers_nom, tiers_adr1, tiers_adr2, tiers_adr3";
    			$q .= " FROM maj_mesure JOIN t_tiers ON(".$champ." = `tiers_id`)";
     
    			$r = mysql_query($q) or die(mysql_error()."<br />".$q);
    			//pour chaque ligne trouver j'affiche la requete update adéquate 
    			//(qui update le champ courant du meilleur tiers_id possible)
    			while($d = mysql_fetch_assoc($r))
    			{
     
    		$sql='UPDATE maj_mesure SET ".$champ."=(SELECT MIN(`tiers_id`) FROM t_tiers
    			  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"])"';
     
    //		$result = mysql_query($sql) or die(mysql_error()."<br />".$sql);
    			}
    		}
    	}
    }
    ?>
    Je boucle quelque part, j'ai choisi de travailler sur 2 dossier 49 et 98, ils ont à eux deux 5 dossiers de mesures pourtant, je suis obligé d'arrêter le traitement tellement c'est long.

    Je ne comprends pas l'intérêt de la requête $q et cela boucle dans le while.
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  20. #20
    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
    La boucle est en fin de compte dans le foreach.

    il reste toujours sur le même champ

    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
     Champ 12007
     
    q - SELECT 12007, tiers_type_id, tiers_nom, tiers_adr1, tiers_adr2, tiers_adr3 FROM maj_mesure JOIN t_tiers ON(12007 = `tiers_id`)
     
    d -Array ( [12007] => 12007 [tiers_type_id] => 60 [tiers_nom] => Tribunal d'Instance de Lyon 1 [tiers_adr1] => Service des Tutelles [tiers_adr2] => 67 rue Servient [tiers_adr3] => )
     
    sql - UPDATE maj_mesure SET ".$champ."=(SELECT MIN(`tiers_id`) FROM t_tiers 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"])"
     
    d -Array ( [12007] => 12007 [tiers_type_id] => 60 [tiers_nom] => Tribunal d'Instance de Lyon 1 [tiers_adr1] => Service des Tutelles [tiers_adr2] => 67 rue Servient [tiers_adr3] => )
     
    sql - UPDATE maj_mesure SET ".$champ."=(SELECT MIN(`tiers_id`) FROM t_tiers 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"])"
     
    d -Array ( [12007] => 12007 [tiers_type_id] => 60 [tiers_nom] => Tribunal d'Instance de Lyon 1 [tiers_adr1] => Service des Tutelles [tiers_adr2] => 67 rue Servient [tiers_adr3] => )
     
    sql - UPDATE maj_mesure SET ".$champ."=(SELECT MIN(`tiers_id`) FROM t_tiers 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"])"
     
    d -Array ( [12007] => 12007 [tiers_type_id] => 60 [tiers_nom] => Tribunal d'Instance de Lyon 1 [tiers_adr1] => Service des Tutelles [tiers_adr2] => 67 rue Servient [tiers_adr3] => )
     
    sql - UPDATE maj_mesure SET ".$champ."=(SELECT MIN(`tiers_id`) FROM t_tiers 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"])"
     
    d -Array ( [12007] => 12007 [tiers_type_id] => 60 [tiers_n
    Dans la 1er mesure trouvé, on a la table champs qui ressemble à ceci "12007" "12007" " ". Le 3ème est à blanc.
    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 1 sur 3 123 DernièreDernière

Discussions similaires

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

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