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] simplification de code


Sujet :

Langage PHP

  1. #1
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut [Tableaux] simplification de code
    Bonsoir,

    Est-il possible de simplifier ceci

    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
    $sql = "SELECT * FROM Fichier2 WHERE Enfants='2' ";
    echo "$sql<br>";
    $query= mysql_query($sql) or die ('Erreur SELECT');
    $nb = mysql_num_rows($query);
    echo "$nb trouvés<br>";
     
    $sql = "SELECT * FROM Fichier2 WHERE Enfants='1' OR Enfants='2' AND Ville='Paris' ";
    echo "$sql<br>";
    $query= mysql_query($sql) or die ('Erreur SELECT');
    $nb = mysql_num_rows($query);
    echo "$nb trouvés<br>";
     
    $sql = "SELECT * FROM Fichier2 WHERE nom LIKE '%ri%' ";
    echo "$sql<br>";
    $query= mysql_query($sql) or die ('Erreur SELECT');
    $nb = mysql_num_rows($query);
    echo "$nb 'ri' trouvés <br>";
    Merci d'avance

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Avec un tableau ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $requetes = array(
        "SELECT * FROM Fichier2 WHERE Enfants='2' ",
        "SELECT * FROM Fichier2 WHERE Enfants='1' OR Enfants='2' AND Ville='Paris' ",
        "SELECT * FROM Fichier2 WHERE nom LIKE '%ri%' "
    );
    foreach ($requetes as $sql) {
        echo "$sql<br>";
        $query= mysql_query($sql) or die ('Erreur SELECT');
        $nb = mysql_num_rows($query);
        echo "$nb trouvés<br>";
    }

    Julp.

  3. #3
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    il me semble que le select count est pus rapide qu'un select *

  4. #4
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Bonjour,

    J'ai fait comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $requetes = array(
        "SELECT COUNT(*) FROM Fichier2 WHERE Enfants='2' ",
        "SELECT COUNT(*) FROM Fichier2 WHERE Enfants='1' OR Enfants='2' AND Ville='Paris' ",
        "SELECT COUNT(*) FROM Fichier2 WHERE nom LIKE '%ri%' "
    );
    foreach ($requetes as $sql) {
        echo "$sql<br>";
        $query= mysql_query($sql) or die ('Erreur SELECT');
        $nb = mysql_num_rows($query);
        echo "$nb trouvés<br>";
    }
    Le problème est que même si je n'ai pas d'enregistrement, "$nb" = 1

  5. #5
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Si tu emploies un COUNT(), tu n'as pas besoin de mysql_num_rows... :

    En plus, tu peut employer COUNT(*) As name pour mettre dans une colonne le nombre d'enregistrements :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $requetes = array(
        "SELECT COUNT(*) AS nb FROM Fichier2 WHERE Enfants='2' ",
        "SELECT COUNT(*) AS nb FROM Fichier2 WHERE Enfants='1' OR Enfants='2' AND Ville='Paris' ",
        "SELECT COUNT(*) AS nb FROM Fichier2 WHERE nom LIKE '%ri%' "
    );
     
    foreach ($requetes as $sql) {
        echo "$sql<br>";
        $query= mysql_query($sql) or die ('Erreur SELECT');
        $data = mysql_fetch_array($query);
        $nb = $data['nb'];
        echo "$nb trouvés<br>";
    }

  6. #6
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    dans la mesure ou la requete ne retourne qu'un seul champ et qu'une seule ligne, le mysql_fetch_array n'est pas du tout performant.

    je remplacerais donc ces 2 lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        $data = mysql_fetch_array($query);
        $nb = $data['nb'];
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        $nb = mysql_result($query, 0, 'nb');

  7. #7
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    J'ai envie d'attendre encore un peu pour savoir s'il va me rester une ligne de code.

    Le résultat donne donc ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $requetes = array(
        "SELECT COUNT(*) AS nb FROM Fichier2 WHERE Enfants='2' ",
        "SELECT COUNT(*) AS nb FROM Fichier2 WHERE Enfants='1' OR Enfants='2' AND Ville='Paris' ",
        "SELECT COUNT(*) AS nb FROM Fichier2 WHERE nom LIKE '%ri%' "
    );
     
    foreach ($requetes as $sql) {
        echo "$sql<br>";
        $query= mysql_query($sql) or die ('Erreur SELECT');
        $nb = mysql_result($query, 0, 'nb');
        echo "$nb trouvés<br>";
    }
    En tout cas ça fonctionne très bien, je n'ai pas assez de volume pour tester l'efficacité en temps d'exécution, mais en compréhension et pour le maintenance ce sera plus clair.

    Merci beaucoup

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

Discussions similaires

  1. [Tableaux] Optimisation de code
    Par allserv dans le forum Langage
    Réponses: 8
    Dernier message: 07/03/2006, 22h44
  2. [Tableaux] probleme de code svp
    Par k-nine01 dans le forum Langage
    Réponses: 3
    Dernier message: 21/02/2006, 21h41
  3. [c#] Simplification de code
    Par Revan012 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 04/02/2006, 16h44
  4. [Tableaux] demande de code pour un menu deroulant
    Par carmen256 dans le forum Langage
    Réponses: 5
    Dernier message: 27/01/2006, 20h36
  5. [Tableaux] demande de code pour une fonction.php
    Par carmen256 dans le forum Langage
    Réponses: 4
    Dernier message: 21/01/2006, 17h22

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