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

Requêtes MySQL Discussion :

optimiser ce code qui reitère les requetes


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Points : 43
    Points
    43
    Par défaut optimiser ce code qui reitère les requetes
    Bonjour
    je recupère un script qui effectue X requetes pour mettre dans des variables distinctes le nombre d'enregistrements repondant à X critères.

    Voila le code:

    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
    # DECOMPTE DES CATEGORIES
    $countpc= mysql_query ("SELECT COUNT(*) AS Plateforme From betatest WHERE Plateforme LIKE '%PC%'");
    $row = mysql_fetch_row ($countpc);
    $donneepc =$row[0];
    $countmac= mysql_query ("SELECT COUNT(*) AS Plateforme From betatest WHERE Plateforme LIKE '%Mac%'");
    $row = mysql_fetch_array ($countmac);
    $donneemac=$row[0];
    $countmed= mysql_query ("SELECT COUNT(*) AS Fonction From betatest WHERE Fonction LIKE '%decin%'");
    $row = mysql_fetch_array ($countmed);
    $donneemed=$row[0];
    $countceg= mysql_query ("SELECT COUNT(*) AS Fonction From betatest WHERE Fonction LIKE '%Ceged%'");
    $row = mysql_fetch_row ($countceg);
    $donneeceg =$row[0];
    $countrev= mysql_query ("SELECT COUNT(*) AS Fonction From betatest WHERE Fonction LIKE '%evend%'");
    $row = mysql_fetch_row ($countrev);
    $donneerev =$row[0];
    Comme c'est pas beau me semble t-il !!!
    Donc ... je me demande comment optimiser ce code en n'effectuant qu'une seule requête .
    Est-ce possible ?
    merci de vos lumières

  2. #2
    Membre confirmé Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Points : 570
    Points
    570
    Par défaut
    Voici une unique requette :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT COUNT(*) AS nbPc From betatest WHERE Plateforme LIKE '%PC%'
    union
    SELECT COUNT(*) AS nbMac From betatest WHERE Plateforme LIKE '%Mac%'
    union
    SELECT COUNT(*) AS nbDecin From betatest WHERE Fonction LIKE '%decin%'
    union
    SELECT COUNT(*) AS nbCeged From betatest WHERE Fonction LIKE '%Ceged%'
    union
    SELECT COUNT(*) AS nbEvend From betatest WHERE Fonction LIKE '%evend%'
    Attention le traitement du résultat diffère de ta méthode puisque dans ce cas, PHP te retournera un tableau à plusieurs dimensions !!
    "Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant."

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Points : 43
    Points
    43
    Par défaut
    merci nounetmasque
    Je regarde cela de suite !
    c'est en effet plus joli comme tu me le présente.

    En terme de rapidité ... est-ce aussi plus intéressant de faire des UNION plutôt que de faire X fois un query ?

  4. #4
    Membre confirmé Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Points : 570
    Points
    570
    Par défaut
    Il est toujours préférable de faire une unique requette que plein de petites. En effet, tu economise la connecxion à ton serveur et surtout MySQL optimise directement ta grosse requette pour obtenir des meilleures performances
    "Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant."

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Points : 43
    Points
    43
    Par défaut
    j'ai un soucis pour exploiter le résultat
    as t-on un autre moyen d'y parvenir en dehors de cela
    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
    $requete="SELECT COUNT(*) AS nbPc FROM betatest WHERE Plateforme LIKE '%PC%'
    union
    SELECT COUNT(*) AS nbMac FROM betatest WHERE Plateforme LIKE '%Mac%'
    union
    SELECT COUNT(*) AS nbDecin FROM betatest WHERE Fonction LIKE '%decin%'
    union
    SELECT COUNT(*) AS nbCeged FROM betatest WHERE Fonction LIKE '%Ceged%'
    union
    SELECT COUNT(*) AS nbEvend FROM betatest WHERE Fonction LIKE '%evend%'";
     
    $reponse=mysql_query($requete) or die ( 'recherche Impossible !');
     
    while (list($pc,$mac,$medecin,$cegedim,$revendeur)=mysql_fetch_row($reponse))
    {
    echo $pc.'|'.$mac.'|'.$medecin.'|'.$cegedim.'|'.$revendeur;
    }
    En utilisant ce don j'ai l'habitude (mysql_fetch_array et une boucle while ) je n'ai rien.

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

Discussions similaires

  1. code qui enlève les iframes ?
    Par rutabagas dans le forum Débuter
    Réponses: 2
    Dernier message: 17/11/2011, 14h58
  2. VBA Optimisation de code, Select Case et requete SQL
    Par Secco dans le forum VBA Access
    Réponses: 7
    Dernier message: 06/05/2008, 21h05
  3. Réponses: 7
    Dernier message: 05/11/2005, 15h53
  4. [SQL - procStock ] optimisation du code (éviter les boucles)
    Par luimême dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/10/2005, 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