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 :

Concaténer plusieurs colonnes d'une table temporaire [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier Avatar de kryogen
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 140
    Points : 107
    Points
    107
    Par défaut Concaténer plusieurs colonnes d'une table temporaire
    Bonjour,
    J'espère être sur le bon forum,
    C'est du PHP et du MYSQL.
    Voilà ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    mysql_query("CREATE TEMPORARY TABLE `dates` SELECT `sta_1_date`,`sta_2_date`,`sta_3_date`,`sta_4_date`,`sta_5_date`,`sta_6_date`,`sta_7_date` FROM `stats_suivi` WHERE `sta_val`='O' AND `sta_annee`='2008' ORDER BY `sta_num_lot`");
    $query0 = "SELECT * FROM `dates` GROUP BY 1";
    $result0 = mysql_query("$query0");
     
    $no0 = 0;
    while($row0=mysql_fetch_object($result0))
    {       
    $xdata[$no0] = $row0->sta_1_date;
    $no0++;
    }
    Je souhaite récupérer pour tous les sta_1_date, sta_2_date,... un exemplaire unique de date.
    Avec la requête ci-dessus je récupère bien les dates uniques de sta_1_date.
    Mais je veux un exemplaire unique de tous les sta1_date, sta_2_date, ... groupés.
    Comment faire ? (j'espère que j'ai été assez explicite)
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    groupés par quoi justement ?
    ecrit nous un exemple de ce que tu souhaites obtenir, ca sera peut etre plus simple à visualiser.

    sinon tu peux deja simplifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while($row0=mysql_fetch_object($result0))
    {       
    $xdata[] = $row0->sta_1_date;
    }

  3. #3
    Membre régulier Avatar de kryogen
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 140
    Points : 107
    Points
    107
    Par défaut
    ouai désolé pas facile d'être clair,
    en fait j'ai une table avec 7 colonnes 'sta_X_date'.
    Dans ces sept colonnes un grand nombre de date avec beaucoup de doublons.
    je voudrai en fait obtenir en définitive une colonne comprenant un exemplaire unique de toutes ces dates.
    (c'est pour faire des stats avec jpgraph).

  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 veux eliminer les doublons au total ou les doublons pour chaque colonne ?

    Pour chaque colonne ca pourrait donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $xdata= array();
    while($row0=mysql_fetch_object($result0))
    {       
    foreach ($row as $colonne=>$date) {
        if (!in_array($date, $xdata[$colonne])) {
             $xdata[$colonne][] = $date;
        }
    }
    }

  5. #5
    Membre régulier Avatar de kryogen
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 140
    Points : 107
    Points
    107
    Par défaut
    Je veux éliminer les doublons au total.
    Une colonne avec un exemplaire unique de date (au lieu de sept colonnes).
    Merci.

  6. #6
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while($row0=mysql_fetch_object($result0))
    {       
      foreach ($row as $date) {
          $recup_date[] = $date;
      }
    }
    $xdata = array_unique($recup_date);

  7. #7
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Et puis tu peux aussi diminuer ton tableau de départ.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mysql_query("CREATE TEMPORARY TABLE `dates` 
    SELECT DISTINCT(`sta_1_date`),DISTINCT(`sta_2_date`),....");

  8. #8
    Membre régulier Avatar de kryogen
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 140
    Points : 107
    Points
    107
    Par défaut
    ok merci je vais essayer tout cela.

  9. #9
    Membre régulier Avatar de kryogen
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 140
    Points : 107
    Points
    107
    Par défaut
    ok dans ce cas là plus la peine de faire de table temporaire.
    donc j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $query0 = "SELECT `sta_1_date`,`sta_2_date`,`sta_3_date`,`sta_4_date`,`sta_5_date`,`sta_6_date`,`sta_7_date` FROM `stats_suivi` WHERE `sta_val`='O' AND `sta_annee`='2008' ORDER BY `sta_num_lot`";
    $result0 = mysql_query("$query0");
     
    while($row0=mysql_fetch_object($result0))
    {       
      foreach ($row0 as $date)
      {
          $recup_date[] = $date;
      }
    }
    $xdata = array_unique($recup_date);
    dernière question, les dates apparaissent bien sur dans le désordre.
    Je souhaiterai toutes les trier.
    J'ai essayé un arsort() mais cela fonctionne pas.
    Une petite idée ?
    merci.

  10. #10
    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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Tout dépend du format de tes dates. Si elles sont en format aaaa/mm/jj, un tri naturel devrait suffire.

    En revanche pour un format jj/mm/aaaa, tu risques d'avoir à repasser par les timestamps...

  11. #11
    Membre régulier Avatar de kryogen
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 140
    Points : 107
    Points
    107
    Par défaut
    en fait je veux trier la variable $xdata.
    je ne veux pas conserver les index mais en ré-attribuer de nouveaux.
    les dates sont au format aaaa-mm-jj.
    je viens d'essayer la fonction natsort() que tu m'indiques mais il me retourne "11"...

  12. #12
    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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Heu... Sauf errreur de ma part, natsort ne renvoie qu'un booléen pour dire si le tri s'est bien passé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $test = array (
      '0' => "2008-01-01"
      '1' => "2004-12-15"
      '2' => "2007-05-31"
      '3' => "2007-06-02"
    );
    natsort($test);
    var_dump($test);
    renvoie bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    array(4) {
      [1]=>
      string(10) "2004-12-15"
      [2]=>
      string(10) "2007-05-31"
      [3]=>
      string(10) "2007-06-02"
      [0]=>
      string(10) "2008-01-01"
    }
    Par contre, ça garde les index...

  13. #13
    Membre régulier Avatar de kryogen
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 140
    Points : 107
    Points
    107
    Par défaut
    merci, autant pour moi en effet cela fonctionne bien.
    et il n'y a pas moyen de réattribuer par la même occasion de nouveaux index ?

  14. #14
    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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    natsort conserve la relation clé/valeur. Le plus simple si tu veux réindexer ton tableau, c'est d'utiliser array_values.
    Comment recalculer les clés d'un tableau ?

  15. #15
    Membre régulier Avatar de kryogen
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 140
    Points : 107
    Points
    107
    Par défaut
    ok merci Celira c'est parfait !

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

Discussions similaires

  1. Supprimer plusieurs colonnes d'une table
    Par bambino dans le forum Développement
    Réponses: 2
    Dernier message: 05/07/2011, 14h04
  2. primary key sur plusieurs colonnes d'une table
    Par hotttttsauce dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 22/04/2008, 12h20
  3. Réponses: 9
    Dernier message: 08/01/2008, 13h58
  4. Réponses: 5
    Dernier message: 27/12/2006, 16h56
  5. Recherche dans plusieurs colonnes d'une table
    Par yoline dans le forum Access
    Réponses: 4
    Dernier message: 26/07/2006, 11h58

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