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

Langage Perl Discussion :

Remplir une liste de tableaux par des requetes sql puis la trier


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 291
    Par défaut Remplir une liste de tableaux par des requetes sql puis la trier
    Bonjour,

    je débute en perl et j'ai quelques soucis pour utiliser les listes...
    Je souhaiterai remplir une liste de listes à partir de requetes sql puis la trier selon la valeur de l'indice n des listes...
    Concretement, voici le tableau que je souhaite générer plus tard à l'affichage :
    Nom commercial | nb vente semaine 24 | nb vente semaine 25 | nb vente semaine 26 |

    Et je souhaiterai que le tableau soit trié sur les ventes de la semaine 26 (descendant)
    Exemple :
    machin | 100 | 30 | 100 |
    bidule | 20 | 150 | 90
    ...etc

    De plus le nombre de ventes n'est pas présent directement en base de données (mais bon ça c'est pas grave)

    Voila ce que j'essaie de faire :
    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
     
    $query="select nom from vendeur";
    my $sth = $dbh->prepare($query);
    $sth->execute;
    my @res=($sth->fetchall_arrayref({}));
     
    #la liste contenant les autres listes
    my @liste;
     
    #pour chaque nom de vendeur je recupere ses différents nombres de ventes et je mets le tout dans une liste associative
    my $i=0;
    foreach my $nom (@res)
    {
                 my %ligne;
    			 #je renseigne chaque case de la ligne en commençant par le  nom
    			 $ligne{"nom"}=$nom;
     
    			 #requete pour chaque case de la ligne
                 $query2="select sum(id_vente) from vente where semaine=\"24\" and nom=$nom->nom";
                 my $sth2=$dbh->prepare($query2);
                 $sth2->execute;
                 @temp=$sth->fetchrow_array;
                 $ligne{"s1"}= $temp[0];
     
    			 $query3="select sum(id_vente) from vente where semaine=\"25\" and nom=$nom->nom";
                 my $sth3=$dbh->prepare($query3);
                 $sth3->execute;
                 @temp2=$sth->fetchrow_array;
                 $ligne{"s2"}= $temp2[0];
     
    			 #...etc...
    			 #puis j'ajoute une ligne à ma liste principale :
    			 $liste[$i]	= %ligne;
    			 $i++;
    }
     
    # et ensuite je trie cette liste pour que ça commence par la ligne ou sum(id_vente) de s25 est la plus élevée
    @listeAffichage=sort({$tableau[2]<=>$tableau[2]}@liste);
    ça ne doit surement pas être ça mais qu'en pensez vous(c'est mon premier script perl )? (si j'ai réussi à bien m'expliquer...)

    Merci pour vos conseils et critiques!

  2. #2
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Quels sont les messages d'erreur?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    			 #puis j'ajoute une ligne à ma liste principale :
    			 $liste[$i]	= \%ligne;
    Cela ne va t'il pas mieux avec une référence de hash?

    En tous cas le mini script suivant fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    use strict;
    use Data::Dumper;
     
    my @liste;
    my %ligne;
    $ligne{"nom"}='val1';
    $ligne{"s1"}= 'val2';
    $ligne{"s2"}= 'val3';
    $liste[0] = \%ligne;
     
    print Dumper  @liste;
    http://perso.univ-rennes1.fr/francoi...ERLnode15.html

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 291
    Par défaut
    Bonjour, merci pour tes conseils!

    Alors voila ou j'en suis...
    La première partie du script ne fais pas d'erreur (remplissage des listes). Par contre je rencontre un souci lorsque je souhaite parcourir ma liste indexée de listes associatives.
    Dans ce cas je ne teste pas encore le tri des listes, je voudrais juste les afficher.
    Donc en gros, j'ai :
    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
     
    # %ligne qui contient les cases nom, ventes...
    # @liste qui contient x %ligne
    # je veux parcourir @liste
    # si je fais ça :
    foreach my $ligne(@liste)
    {
    # ...
    }
    # il me dit : Global symbol "%ligne" requires explicit package name at fonctions.pl
     
    # si je mets ça :
    foreach my %ligne(@liste)
    {}
    #il me dit : Missing $ on loop variable at fonctions.pl
    Mais alors que faire pour parcourir ce genre de structure??

    Merci beaucoup pour votre aide

  4. #4
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach my $hash (@liste){
           foreach my $key ( keys %{$hash}){
                  print $key."\t".${$hash}{$key}."\n";
           }
    }

    $hash contient la référence vers ton hash et tu dois déférencer afin de récupérer ses valeurs. Cette opération s'effectue via %{}

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 291
    Par défaut
    Merci pour ta réponse, je situe mieux le problème.
    Par contre, ce qui m'embête, c'est que je souhaiterai récuperer les valeurs des clés dans un ordre précis. J'ai regardé la définition de la fonction keys mais a priori ce n'est pas possible. Comment faire?

    Je ne comprends pas non plus pour quoi on peut faire ça (exemple trouvé sur un site) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    my %donnees = (Nom => "Jeanne", age => 23, ville => "Marseille", formation => "Bachot");
     
    print "$donnees{'Nom'} a $donnees{'age'} ans, habite à $donnees{'ville'} et a son  $donnees{'formation'}\n";
    mais que si %donnees est dans un tableau alors on ne peut pas faire appel aux clés pour avoir les valeurs... Je suis perplexe...

    Encore merci (et désolé de rien comprendre...)

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 291
    Par défaut
    J'ai trouvé!

    Voila ce que je fais pour récupérer mes valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach my $hash (@liste){
         print $hash->{'nom de la cle'}."\n";
    }
    C'est impeccable!

    Merci beaucoup pour ton aide Jasmine80, je crois que sinon j'aurais désespéré...

    Bonne journée!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/06/2012, 08h49
  2. WCF Data Service : remplir une liste par des String
    Par safisafi dans le forum Silverlight
    Réponses: 7
    Dernier message: 22/07/2011, 18h58
  3. Réponses: 1
    Dernier message: 20/03/2007, 09h24
  4. Réponses: 12
    Dernier message: 28/11/2006, 15h34
  5. Remplir une Liste par SQL ?
    Par Zigouigoui dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 03/12/2005, 17h08

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