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 :

Possible de regrouper les requêtes ?


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Par défaut Possible de regrouper les requêtes ?
    Bonjour,

    j'ai une requête qui permet de me récupérer quelques infos sur un utilisateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT u.ID_USER, u.EMAIL, e.LDAP
        FROM t_users AS u LEFT JOIN t_entites AS e
                ON u.ID_ENTITE = e.ID_ENTITE
       WHERE u.IS_SUPERVISEUR = '1'
    GROUP BY u.ID_USER, u.EMAIL, e.LDAP
    ORDER BY u.EMAIL;
    Pour l'instant mon algo fait que je parcours chaque enregistrement (il y en a 92 en tout), et pour chacun, je lance 2 requêtes :
    1ère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT COUNT(i.ID_IDEE) AS NB_IDEES
      FROM t_idees AS i INNER JOIN t_idees_dates AS d
              ON i.ID_IDEE = d.ID_IDEE
     WHERE ((i.ID_SUPERVISEUR = 10897 AND i.ID_STATUT = 2)
            OR(i.ID_EXPERT IN (SELECT ID_USER
                                 FROM t_users
                                WHERE ID_SUPERVISEUR = 10897)
               AND i.ID_STATUT BETWEEN 2 AND 4))
           AND i.ABANDON = 1;
    2ème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT ID_STATUT, count(i.ID_IDEE) AS NB_IDEES
        FROM t_idees AS i INNER JOIN t_idees_dates AS d
                ON i.ID_IDEE = d.ID_IDEE
       WHERE i.ID_EXPERT IN (SELECT ID_USER
                               FROM t_users
                              WHERE ID_SUPERVISEUR = 10897)
             AND ((i.ID_STATUT IN (2, 3, 4) AND i.ABANDON <> 1)
                 OR(i.ID_STATUT IN (5, 6, 7, 8) AND i.CLOTURE <> 1))
    GROUP BY i.ID_STATUT
    ORDER BY i.ID_STATUT ASC;
    dans lesquelles ID_SUPERVISEUR est égal à l'ID_USER de la 1ère requête. Et ma page est super longue à s'afficher du coup, est-ce que vous pensez que c'est possible de regrouper les 3 requêtes ? Je continue à chercher en attendant..

    Merci !

  2. #2
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Par défaut
    Personne n'a une idée ?
    Au moins pour regrouper les 2 premières requêtes..j'ai essayé ça :
    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
    SELECT u.ID_USER,
             u.EMAIL,
             e.LDAP,
             (SELECT COUNT(i.ID_IDEE) AS NB_IDEES
                FROM t_idees AS i INNER JOIN t_idees_dates AS d
                        ON i.ID_IDEE = d.ID_IDEE
               WHERE ((i.ID_SUPERVISEUR = u.ID_USER AND i.ID_STATUT = 2)
                      OR(EXISTS
                            (SELECT u2.ID_USER
                               FROM t_users u2
                              WHERE i.ID_EXPERT = u2.ID_USER
                                    AND u2.ID_SUPERVISEUR = u.ID_USER)
                         AND i.ID_STATUT BETWEEN 2 AND 4))
                     AND i.ABANDON = 1)
        FROM t_users AS u LEFT JOIN t_entites AS e
                ON u.ID_ENTITE = e.ID_ENTITE
       WHERE IS_SUPERVISEUR = '1'
    GROUP BY u.ID_USER, u.EMAIL, e.LDAP
    ORDER BY EMAIL
    mais c'est 10 fois trop long à s'exécuter !!

  3. #3
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    J'ai du mal à comprendre ce que tu cherches à obtenir par cette requête.
    Peux-tu exprimer le besoin en français STP ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Par défaut
    la 2ème requête sert à compter le nombre d'idées d'un superviseur "A" (qui vient de la 1ère requête) + le nombre d'idées des experts qui ont pour superviseur "A", je peux pas faire plus clair

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Dans la première requête, le GROUP BY est inutile puisqu'il n'y a pas de fonction d'agregation. S'il peut y avoir plusieurs fois le même couple {user, ldap}, mettre un SELECT DISTINCT.

    la 2ème requête sert à compter le nombre d'idées d'un superviseur "A" (qui vient de la 1ère requête) + le nombre d'idées des experts qui ont pour superviseur "A",
    Je me sers de ta deuxième requête...

    Nb d'idées par superviseur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT u.ID_USER AS id_superviseur, 
      u.EMAIL AS adrel_superviseur,
      e.LDAP AS ldap_superviseur, 
      COUNT(i.*) AS nb_idees_superviseur
    FROM t_users AS u 
    LEFT JOIN t_entites AS e ON u.ID_ENTITE = e.ID_ENTITE
    LEFT JOIN t_idees AS i ON i.ID_SUPERVISEUR = u.ID_USER
      AND i.ID_STATUT = 2
      AND i.ABANDON = 1
    WHERE u.IS_SUPERVISEUR = '1'
    GROUP BY u.ID_USER, u.EMAIL, e.LDAP
    ORDER BY u.EMAIL
    Nb d'idées des experts de chaque superviseur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT u.ID_USER AS id_superviseur,
      u.EMAIL AS adrel_superviseur,
      u2.ID_USER AS id_expert,
      e.LDAP AS ldap_superviseur,
      COUNT(i2.*) AS nb_idees_expert
    FROM t_users AS u 
    LEFT JOIN t_entites AS e ON u.ID_ENTITE = e.ID_ENTITE
    LEFT JOIN t_users AS u2 ON u2.ID_SUPERVISEUR = u.ID_USER
      LEFT JOIN t_idees AS i2 ON i2.ID_EXPERT = u2.ID_USER
        AND i2.ID_STATUT BETWEEN 2 AND 4
        AND i2.ABANDON = 1
    WHERE u.IS_SUPERVISEUR = '1'
    GROUP BY u.ID_USER, u.EMAIL, e.LDAP, u2.ID_USER
    Par contre comme dans ta deuxième requête il y a i.ABANDON = 1 et que dans les suivantes ça change, je suis un peu paumé pour la suite, surtout que tu comptes cette fois par statut.

    J'espère t'avoir mis sur la piste.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Par défaut
    bon en fait ces 2 requêtes (Nb d'idées par superviseur et Nb d'idées des experts de chaque superviseur) sont aussi super lentes je laisse tomber, tant pis la page sera lente.

Discussions similaires

  1. [SQL] regrouper les requêtes en 1 fichier include ?
    Par grinder59 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 27/01/2012, 13h00
  2. Opérations "Regroupement" et "Somme" dans les requêtes
    Par louisbru dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 27/02/2009, 19h29
  3. [A-03] SQL : requête de synthese, regrouper les petites valeurs
    Par yupyupxav dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 18/12/2008, 11h29
  4. requête dont je n'arrive pas à regrouper les résultats
    Par mdr_cedrick dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/02/2008, 11h05
  5. Regrouper les résultats de 3 requêtes en une seule
    Par getz85 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 28/01/2008, 18h39

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