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 PHP Discussion :

[Tableaux] Optimisation de code


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Avatar de Konrad Florczak
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 242
    Par défaut [Tableaux] Optimisation de code
    Bonjour je me demande comment je pourrais optimiser ce code très repetitif.
    Je pensais mettre les valeurs debug, info, warn, error, fatal dans un table
    et ensuite faire des boucles.

    Mais je vois aps trop comment je pourrais faire ca ?

    Si quelqu'un pouvait me filer un coup de main, ca serait bien sympatique.

    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
    <?php
    if(isset($_GET['date'])&&isset($_GET['date2']))
    {
        $date  = $_GET['date'];
        $date2 = $_GET['date2'];
        include("connect_db.php");
            if($date == $date2)
                {
                $sql_debug = mysql_query("select count(*) from log4j where time='$date' AND warning='error';")or die(mysql_error());
                $sql_info  = mysql_query("select count(*) from log4j where time='$date' AND warning='info'; ")or die(mysql_error());
                $sql_warn  = mysql_query("select count(*) from log4j where time='$date' AND warning='warn'; ")or die(mysql_error());
                $sql_error = mysql_query("select count(*) from log4j where time='$date' AND warning='fatal';")or die(mysql_error());
                $sql_fatal = mysql_query("select count(*) from log4j where time='$date' AND warning='error';")or die(mysql_error());
                }
            else
                {
                $sql_debug = mysql_query("select count(*) from log4j where (time BETWEEN'.$date' AND '$date2') AND warning='error';")or die(mysql_error());
                $sql_info  = mysql_query("select count(*) from log4j where (time BETWEEN'.$date' AND '$date2') AND warning='info' ;")or die(mysql_error());
                $sql_warn  = mysql_query("select count(*) from log4j where (time BETWEEN'.$date' AND '$date2') AND warning='warn' ;")or die(mysql_error());
                $sql_error = mysql_query("select count(*) from log4j where (time BETWEEN'.$date' AND '$date2') AND warning='error';")or die(mysql_error());
                $sql_fatal = mysql_query("select count(*) from log4j where (time BETWEEN'.$date' AND '$date2') AND warning='fatal';")or die(mysql_error());
                }
     
    $debug = mysql_fetch_array($sql_debug);
    $info  = mysql_fetch_array($sql_info) ;
    $warn  = mysql_fetch_array($sql_warn) ;
    $error = mysql_fetch_array($sql_error);
    $fatal = mysql_fetch_array($sql_fatal);
     
        echo"<table><tr><td><b>Type</b></td><td><b>Number</b></td></tr>";
        echo"<tr><td>debug</td><td>".$debug."</td></tr>";
        echo"<tr><td>info </td><td>".$info."</td></tr>";
        echo"<tr><td>warn </td><td>".$warn."</td></tr>";
        echo"<tr><td>error</td><td>".$error."</td></tr>";
        echo"<tr><td>fatal</td><td>".$fatal."</td></tr>";
        echo"</table>";
    }
    else{
    echo "Please enter select start date, end date and environment";
    }
    ?>

  2. #2
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    Sans doute avec un GROUP BY.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) FROM log4j WHERE time='$date' GROUP BY warning;

  3. #3
    Membre confirmé
    Avatar de Konrad Florczak
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 242
    Par défaut
    non je voulais dire au niveau du PHP
    mettre les variables dans un tableau php et mettre des boucles

    je sais le faire en perl mais en php...

    en perl ca sera quelque chose dans ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    my %Compteur = qw(WARN 0 INFO 0 ERROR 0 FATAL 0);
    while(<IN>)
    {
        ++$Compteur{$1} if (/(WARN|INFO|ERROR|FATAL)/);
    }
    close(IN);

  4. #4
    Membre émérite Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Par défaut
    Tu peux utiliser un GROUP BY pour ne faire qu'une seule requete.

    Ensuite, tu construit ton tableau de valeurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $sql = "SELECT warning,COUNT(*) AS NB FROM log4j WHERE time='$date' GROUP BY warning;"
    $res=mysql_query($sql);
    while($tmp=mysql_fetch_array($res)){
    $tab[$tmp['warning'] = $tmp['NB'];
    }
    Ensuite tu en fait ce que tu veux. Si tu ne veux faire que de l'affichage, tu peux faire des echos directs dans la boucle while
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo "<tr><td>" .$tmp['warning'] ."</td><td>" .$tmp['NB'] ."</td></tr>";

  5. #5
    Membre confirmé
    Avatar de Konrad Florczak
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 242
    Par défaut
    Ok merci je comprend maintenant l'utilisation des mysql_fetch_array and co
    bon je vais pouvoir faire des requetes plus denses et plus compliqué en mysql maintenant.

    Merci beaucoup je vous tiens au courant

  6. #6
    Membre confirmé
    Avatar de Konrad Florczak
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 242
    Par défaut
    mais alors si je comprend bien ton exemple le $res devient un tableau de type (5;2) avec comme valeurs (testées sur mon sql)


    debug 2455
    info 452
    warn 11
    error 1
    fatal 0

    ou c'est un tableau une dimension type :

    debug 2455 info 452 warn 11 error 1 fatal 0

    donc si je veux afficher la valeur 2455 je lui dis $res[2]

    Désolé on y est presque mais j'ai regardé les docs et je trouve pas ca très clair, vu que mysql_fetch_array c'est plutot utilisé genre

    while{
    echo "$table_resultat['mavaleur_dun_select']";
    }

  7. #7
    Membre émérite Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Par défaut
    $res n'est pas un tableau, c'est un recordset.

    Pour pouvoir utiliser les données contenues à l'intérieur ( sous forme de ligne ), il faut passer par les fonctions de fetch ( mysql_fetch_row,mysql_fetch_array,mysql_fetch_object)

    Suivant la fonction que tu as choisi, tu obtiens un type de variable différent ( tableau, objet )

    Dans le cas de mysql_fetch_array cela renvoie un tableau associatif ( nom de la colonne =>valeur + un index numérique ).

    Chaque appel, à la fonction de fetch fait avancer le pointeur dans le recordset. Quand il n'y a plus de lignes, la fonction renvoie null et on sort de la boucle

    Edit : Dans l'exemple que je t'ai donné, on parcours le jeu de résultat en plaçant les différentes variables au sein d'un tableau organisé comme ceci :
    type de warning -> Nombre

Discussions similaires

  1. [Tableaux] Optimisation de code
    Par allserv dans le forum Langage
    Réponses: 8
    Dernier message: 07/03/2006, 22h44
  2. Optimiser mon code ASP/HTML
    Par ahage4x4 dans le forum ASP
    Réponses: 7
    Dernier message: 30/05/2005, 10h29
  3. optimiser le code
    Par bibi2607 dans le forum ASP
    Réponses: 3
    Dernier message: 03/02/2005, 14h30
  4. syntaxe et optimisation de codes
    Par elitol dans le forum Langage SQL
    Réponses: 18
    Dernier message: 12/08/2004, 11h54
  5. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2004, 10h59

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