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 :

Traitement de doublons compliqué [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Points : 206
    Points
    206
    Par défaut Traitement de doublons compliqué
    Bonjour à tous !
    Je suis sur un projet qui nécéssite de faire une chose assez complexe à mes yeux.

    En effet, chaque mois, un fichier contenant des enregistrements est fait. Il est converti en table de base de données:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Janvier2010 -> Une table
    Fevrier2010 -> Une table
    Mars2010 -> Une table
    Cependant, le monde de l'entreprise ne fonctionne pas toujours comme prévu, et il arrive que les fichiers en question soient envoyés avec un autre, mais dans le meme, ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Janvier2010 -> Une table
    Fevrier2010 -> ???
    Mars2010 -> ???
    Avril2010 -> Une table ( qui contient les enregistrements de fevrier et mars )
    Mai2010 -> Une table
    Juin2010 -> ???
    Etc ...
    On ne peut pas prévoir le décalage. Ce que l'on sait, c'est que si une table contient des doublons sur le noms c'est qu'il y a plusieurs facturations dans la meme table.

    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
    Exemple correct :
    ROBERT Julien
    RYU Titi
     
    Deux facturations
    ROBERT Julien
    ROBERT Julien
    RYU Titi
    RYU Titi
     
    Trois facturations :
    ROBERT Julien
    ROBERT Julien
    ROBERT Julien
    RYU Titi
    RYU Titi
    RYU Titi
     
    Etc ...
    Le soucis est que j'affiche ces données sur un graphique ( Avec artichow mon bien aimée ) de la manière suivante :

    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
    foreach($selected_year as $selectValue)
    {
       echo "<h1>Année $selectValue</h1><br><br>";
       // Une boucle qui permet de récuperer les données sur chaque mois de l'année selectionnée
       for($i;$i<12;$i++)
       {
           // On compose le nom de la table dans la BDD avec le mois selectionné            
          $T_factur=$mois[$i].$selectValue;
          // Calcul du montant de la facture                                                             
          $result = mysql_query("SELECT LOYER FROM ".$T_factur." WHERE CODE_PRODUIT_CATALOGUE LIKE '%bal%' AND LOYER>0");
             while ($row = mysql_fetch_object($result)) 
             {
                $loyer=$row->LOYER;
                $loyer=str_replace(",",".",$loyer);
                $loyersum = $loyersum + $loyer;
             }
             $values[$i] = $loyersum;
             $loyersum = 0;
     
             $result = mysql_query("SELECT LOYER FROM $T_factur WHERE CODE_PRODUIT_CATALOGUE LIKE '%CLASST%' AND LOYER>0");
             while ($row = mysql_fetch_object($result)) 
             {
                $loyer=$row->LOYER;
                $loyer=str_replace(",",".",$loyer);
                $loyersum = $loyersum + $loyer;
             }
             $values2[$i] = $loyersum;
             $loyersum = 0;
              }      
            }
    Les arrays "values" et "values2" sont envoyé à mes graphiques artichow, comportant chacun les sommes des loyers des mois. ( Janvier, fevrier, mars ..., decembre )

    L'array "mois" contient la liste des mois au format texte
    Le nom des tables est composé avec ce mois et l'année selectionnée par l'utilisateur.

    Pour simplifier la base, on va dire qu'elle comporte dans chaque table les champs NOM, PRENOM, CODE_PRODUIT_CATALOGUE et LOYER

    Avez vous une idée, dans mon cas, de la marche à suivre pour lister les doublons, et suivant leur nombre ( 1, 2 ,3 ou plus ) en décaler un sur le mois d'avant, puis celui d'avant, puis celui d'avant, etc ... ( Un au hasard, les loyers sont les memes à un centime près, et celà ne dérange en rien l'étude statistique si il y a une différence de quelques euros ) ???

    Ce traitement doit se faire sans créer de nouvelles tables, et donc uniquement avec des requetes SQL ou des actions en PHP.

    NB : Il faut tenir compte du fait qu'une facturation en decembre 2009 peut etre dans la facturation de Fevrier 2010.

    Comme d'habitude, je ne demande pas la solution mais une marche à suivre !
    Bien cordialement
    La politesse n'a jamais tué personne
    Le langage SMS c'est le mal !
    Pensez au tag

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pour moi, avoir une table par mois est une erreur enorme de conception.
    Dans une bonne structure tu ne rencontrais pas ces difficultés.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Points : 206
    Points
    206
    Par défaut
    Le probleme est que la facturation est faites par un sous traitant, et qu'elle nous arrive directement en fichier excel. De là il est importé dans la base.

    Si je n'ai pas une table par mois, cela veux dire que les facturations de l'année ( et même plus ) sont toutes dans la meme table. Chacune des tables contient environ 1300 enregistrements. ( 1300 facturations ) et ce chiffre est amené à s'agrandir. Celà donnerait quoi sur une dizaine d'années ?
    De plus il faudrait que je fasse des requetes plus complexes avec des conditions supplémentaire pour sortir les enregistrements par mois, etc ... Sans parler d'autres soucis qui sont lié à ça.

    Mais nous nous éloignons du sujet principal. Merci de ta remarque pertinente, mais j'ai posté ici dans la partie PHP&MySQL, pas dans la partie conception . Je ne peux pas modifier cette structure ( Sinon, j'aurais refait la base moi même et pour ne pas te faire halluciner je ne vais pas te montrer la base en entier :p ) puisque c'est un projet déjà en production que je reprends. Nous sommes coincés avec le formalisme des fichiers que le sous traitant nous fait parvenir ( et les délais viennent s'ajouter aux problèmes )

    Donc si tu as une idée sur la manière de résoudre ce petit souçis je suis preneur !

    Bien cordialement.
    La politesse n'a jamais tué personne
    Le langage SMS c'est le mal !
    Pensez au tag

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as déjà une usine à gaz, je te propose de ne pas la complexifier encore : corrige ton import plutot que d'avoir a faire le rattrapage a chaque lecture.

    Il est plus facile de réaliser ton décalage en arriere lors de l'insertion (si xxx a déjà été traité, reculer d'un mois etc.) que d'aller rechercher lorsqu'on veut le mois de mars d'eventuels doublon et triplons dans les mois précédents (de plus jusqu'ou aller chercher ?).
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Points : 206
    Points
    206
    Par défaut
    Cela me parait réalisable en effet ! Merci de l'info, je vais m'y atteler dès demain et je tâcherai de vous tenir au courant de l'évolution de mes travaux.

    Bien cordialement.

    EDIT : J'ai finalement traité les données à l'affichage. J'ai réussi à répartir les données sur 6 Mois au maximum ( imposé par les utilisateurs du système ).

    J'affiche une seule année, mais je selectionne l'année précédente également.
    J'ai fusionnée les données ( deux array de 12 éléments ) et je commence l'affichage au 12 ème élément. Ce qui me permet de tester si les facturations sont présente ou pas sur les 12 mois précédent le début du graphique, ce qui est acceptable. Pour l'instant, celà fonctionne. J'ai proposé aux personnes responsables de modifier la BDD, je le ferai si c'est accepté.

    Merci pour tes remarques !
    Bien cordialement.
    La politesse n'a jamais tué personne
    Le langage SMS c'est le mal !
    Pensez au tag

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

Discussions similaires

  1. [MySQL-5.1] Requête SQL en jointure avec traitement de doublons
    Par gat91200 dans le forum MySQL
    Réponses: 2
    Dernier message: 24/06/2015, 09h36
  2. Traitement des doublons
    Par astrolane dans le forum Langage
    Réponses: 5
    Dernier message: 06/09/2007, 18h38
  3. [Conception] Traitement des doublons (grosse BDD)
    Par masseur dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 05/07/2007, 08h59
  4. Traitement assez compliqué sur un signal
    Par Gui13 dans le forum LabVIEW
    Réponses: 3
    Dernier message: 27/06/2007, 09h30
  5. Traitement des Doublons
    Par dert72 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/06/2006, 09h46

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