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 :

Simplification d'un tableau avec doublons [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 6
    Par défaut Simplification d'un tableau avec doublons
    Bonjour à tous !
    Nouveau dans ce forum et nouveau en php/mysql, j'aurai une question qui paraitra peut-etre bete à certains...

    J'ai un tableau principal contenant des tableaux et qui a l'allure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Array (
      Array ( [0] => 05/2009 [1] => 1 [2] => 1 [3] => 7.00 ) 
      Array ( [0] => 06/2009 [1] => 2 [2] => 1 [3] => 13.00 ) 
      Array ( [0] => 06/2009 [1] => 2 [2] => 1 [3] => 13.00 ) 
      Array ( [0] => 06/2009 [1] => 2 [2] => 1 [3] => 13.00 ) 
      Array ( [0] => 08/2009 [1] => 3 [2] => 1 [3] => 28.00 ) 
      Array ( [0] => 08/2009 [1] => 3 [2] => 1 [3] => 28.00 ) 
      Array ( [0] => 08/2009 [1] => 3 [2] => 1 [3] => 28.00 ) 
      Array ( [0] => 09/2009 [1] => 2 [2] => 1 [3] => 14.00 ) 
      Array ( [0] => 09/2009 [1] => 2 [2] => 1 [3] => 14.00 ) 
      Array ( [0] => 10/2009 [1] => 1 [2] => 1 [3] => 28.00 ) 
      Array ( [0] => 10/2009 [1] => 1 [2] => 1 [3] => 28.00 ) 
    )
    Comme vous pouvez le voir, certaines lignes sont identiques !
    Bien naturellement, vous me direz : "ben, faut les supprimer car ça ne sert à rien d'avoir des doublons..."
    Et vous aurez parfaitement raison !!!
    L'objectif étant d'arriver au résultat suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Array (
      Array ( [0] => 05/2009 [1] => 1 [2] => 1 [3] => 7.00 ) 
      Array ( [0] => 06/2009 [1] => 2 [2] => 1 [3] => 13.00 ) 
      Array ( [0] => 08/2009 [1] => 3 [2] => 1 [3] => 28.00 ) 
      Array ( [0] => 09/2009 [1] => 2 [2] => 1 [3] => 14.00 ) 
      Array ( [0] => 10/2009 [1] => 1 [2] => 1 [3] => 28.00 ) 
    )
    Mais voila, le problème est bien là, moi pas savoir faire...

    J'ai essayé de voir dans les fonctions des array, et rien n'y fait... la fonction array_unique serait top, mais elle ne fait que supprimer les doublons des valeurs et pas les lignes complètes en doublons...

    Si quelqu'un a une idée pour m'orienter, ce serait super cool !!!
    Merci

  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
    Par défaut
    Bonjour et bienvenu sur le forum,

    Est-ce qu'il ne vaut pas mieux agir sur la source qui te produit des informations en double ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Le tableau est en relation avec une base de données ? tu as les données en doublon en base ? ou alors tu veux dédoublonner le tableau avant d'insérer ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Nouveau membre du Club
    Inscrit en
    Décembre 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 6
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Bonjour et bienvenu sur le forum,

    Est-ce qu'il ne vaut pas mieux agir sur la source qui te produit des informations en double ?
    Bonjour Sabotage et merci pour la bienvenue

    Les infos me viennent bien d'une BDD mysql !
    Petit historique sur les données :
    La table de provenance contient plusieurs champs dont celui de la date...
    le select des champs se fait par rapport à la date (au format YYYY-MM-DD) : si la date est contenu entre le début du mois et la fin du mois, alors je récupère les infos des autres champs (pour des count, sum...).
    Le plus simple aurait été de faire un GROUP BY dans le select, mais bien évidemment, les jours des dates ne sont pas identiques, il n'y a donc pas possibilité de les grouper...

    Pour donner le cheminement complet :
    J'ai un formulaire de recherche multicritères.
    En fonction de la recherche, je sélectionne les infos correspondantes dans la table.
    Dans mon exemple, je récupère 11 enregistrements avec pour chacun la date correspondante + la description + le nom de la personne + le montant.
    Pour chaque date, si elle est comprise entre le début du mois et la fin du mois, je fais le total des autres infos (total description, total des personnes et total des montants) qui sont comprises dans le mois !

    Donc en bref (j'ai résumé les requetes au signifiant du fonctionnement) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $donnees = select * from table where "FiltreRechercheMulticritères"
    while($data = mysql_fetch_assoc($donnees) {
    $traiteDates = explode("-", $data["date"]);
    $debMois = $traiteDates[2]."-".$traiteDates[1]."-01";
    		$finMois = $traiteDates[2]."-".$traiteDates[1]."-31";
    		$affichDate = $traiteDates[1]."/".$traiteDates[2]; // celle qui est affichée dans l'array en MM/YYYY
    foreach($data as $value){ 
    			$descCount = "SELECT COUNT(DISTINCT description) AS description, COUNT(DISTINCT nom) AS personnes, SUM(montant) AS totalHeure FROM table where "FiltreRechercheMulticritères" AND date BETWEEN '".$debMois."' and '".$finMois."' ORDER BY date ASC");
    			$descTotal = mysql_fetch_assoc($descCount);
    		}
    $tableauInfo = array($affichDate, $descTotal['description'], $descTotal['personnes'], $descTotal['totalHeure']);
    print_r($tableauInfo); //--> ce qui est affiché dans mon 1er post...  :-(
    }
    Ci-dessus le code, mais en francais, ca donne :
    Je récupère toutes les données correspondantes à la recherche.
    Dans ces données je regarde celles qui sont comprises dans chaque mois.
    Je fais des totaux et je crée un graph (mais sans les doublons...).

    Peut-etre ma méthode n'est pas bonne ou pas très "orthodoxe", mais faut bien débuter avec quelque chose...

    Donc comme le dernier select est sur la base des dates qui ne sont pas identiques, je ne peux pas épurer les résultats avant affichage...

    C'est dommage car tout mon code fonctionne correctement, mes données sont bonnes et mes infos à afficher pour le graph sont là... je n'ai plus qu'à virer ces foutus doublons et j'y suis !!!!

    Merci encore pour la réponse rapide et aussi pour d'autres suggestions à mon problème ?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 6
    Par défaut
    Citation Envoyé par Celira Voir le message
    Le tableau est en relation avec une base de données ? tu as les données en doublon en base ? ou alors tu veux dédoublonner le tableau avant d'insérer ?
    Bonjour Celira,

    Je viens de répondre à un message précédent : j'explique d'où viennent les données et comment je les récupère pour former le tableau en question !

    Donc, oui, elles viennent bien d'une base mysql et non, elles ne sont pas en doublon en base car dans mon array, les infos mentionnées proviennent de calcul d'addition d'autres champs.

    Et OUI !!! je voudrais dédoublonner le tableau avant insertion des infos dans un graph !!!

    Si vous avez une idée sur comment enlever ces fichus doublons...

  6. #6
    Nouveau membre du Club
    Inscrit en
    Décembre 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 6
    Par défaut
    Bouhouhou
    Personne n'aurait une petite idée à me proposer ???
    S'iou plait...

  7. #7
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    le "foreach" n'est pas utilisé donc tu peux directement le retirer et faire une seule requête au lieu de la boucle

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    une possibilité hideuse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $t1 = array_map( 'serialize' , $monTableau );
    $t2 = array_unique( $t1 );
    $monTableau = array_map( 'unserialize' , $t2 );
    Il serait tout de même préférable de voir ce que tu peux faire coté DB

  9. #9
    Nouveau membre du Club
    Inscrit en
    Décembre 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 6
    Par défaut
    Citation Envoyé par nosferapti Voir le message
    le "foreach" n'est pas utilisé donc tu peux directement le retirer et faire une seule requête au lieu de la boucle
    Bonjour et merci pour la réponse !!!
    Effectivement, après relecture, le foreach peut tout à fait être enlevé...
    Ben oui... c'est ça aussi de débuter...
    En tous les cas, enlever la boucle allège drôlement l'exécution !!!
    Merci beaucoup pour le conseil

  10. #10
    Nouveau membre du Club
    Inscrit en
    Décembre 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 6
    Par défaut
    Citation Envoyé par Petibidon Voir le message
    une possibilité hideuse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $t1 = array_map( 'serialize' , $monTableau );
    $t2 = array_unique( $t1 );
    $monTableau = array_map( 'unserialize' , $t2 );
    Il serait tout de même préférable de voir ce que tu peux faire coté DB
    Hello,

    Tout d'abord, merci pour la proposition : elle est peut-être "hideuse", mais elle convient !!!!!
    J'avais fait un tour sur les fonctions php des array (dont j'étais loin d'imaginer qu'il en existait autant...) et je pensais bien qu'il y avait une solution de ce côté là, mais sans pour autant trouver le bon couple de fonctions à utiliser... Merci encore de m'avoir "dépatouillé" ce fichu tableau !

    Je considère le sujet clos tout en sachant que je vais certainement suivre ton conseil de voir côté DB, car il s'agit finalement d'un traitement de dates, qui sont le référent de mon tableau, et qu'il y a sûrement moyen de gérer ça en direct sur la DB (ce qui me permettra en même temps d'optimiser les ressources serveur...).

    encore merci à tous et à très bientôt pour un nouveau problème

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

Discussions similaires

  1. alterner les couleurs dans un tableau avec xsl
    Par Eithelgul dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 03/05/2015, 23h29
  2. [WD16] Tableau associatif avec doublon + suppression
    Par R&B dans le forum WinDev
    Réponses: 9
    Dernier message: 26/04/2011, 15h10
  3. Comment remplir un tableau avec random sans doublon ?
    Par muntu dans le forum Collection et Stream
    Réponses: 15
    Dernier message: 16/07/2010, 09h42
  4. [WD14] Liste Clé de tableau associatif avec doublons
    Par mail.spam dans le forum WinDev
    Réponses: 2
    Dernier message: 27/10/2009, 17h10
  5. 2 Tableau avec doublons
    Par jaafar dans le forum Langage
    Réponses: 1
    Dernier message: 21/07/2008, 21h17

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