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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé 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
    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

  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
    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)...

  3. #3
    Membre éprouvé 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
    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.

  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
    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.

  5. #5
    Membre éprouvé 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
    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 ?

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    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

+ Répondre à la discussion
Cette discussion est résolue.

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