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

PHP & Base de données Discussion :

Optimisation d'une requête SQL


Sujet :

PHP & Base de données

  1. #1
    Membre régulier Avatar de PIEPLU
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    507
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 507
    Points : 92
    Points
    92
    Par défaut Optimisation d'une requête SQL
    Bonjour tout le monde,

    J'aurais besoin de vos précieux conseils pour optimiser une requête que j'ai fait mais qui est bien trop lourde.

    Voici ma requête :
    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
    SELECT E.nom_entreprise,E.id_entreprise,A.dt_avis
    FROM Entreprises E
    JOIN Avis A
    USING ( id_entreprise ) 
    JOIN (
    	SELECT A.id_entreprise,MAX( A.dt_avis ) AS dt_avis
    	FROM Avis A
    	group by A.id_entreprise
    	ORDER BY dt_avis DESC
    )t
    USING ( id_entreprise, dt_avis ) 
    WHERE E.ville_entreprise =  'paris'
    AND E.cp_entreprise =  '75015'
    GROUP BY E.id_entreprise
    ORDER BY dt_avis DESC 
    LIMIT 0 , 30
    Voici l'explication de la SQL :
    J'ai deux tables. Entreprises et Avis
    La première table, j'ai dedans id_entreprise, nom_entreprise, ville_entreprise
    La seconde table, j'ai dedans id_avis, id_entreprise, dt_avis (date de l'avis)

    Le but de la requête, c'est d'afficher les avis les plus récent (dt_avis desc) selon la ville dans Entreprises en groupant les id_entreprise de Entreprises identiques.

    Merci de votre aide !!!
    Vincent Pieplu
    Développeur Site Internet

  2. #2
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    En faisant comme ceci :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT E.nom_entreprise,E.id_entreprise,A.dt_avis
    FROM Entreprises E
    JOIN Avis A ON E.id_entreprise = A.id_entreprise
    WHERE E.ville_entreprise =  'paris'
    AND E.cp_entreprise =  '75015'
    ORDER BY dt_avis DESC 
    LIMIT 0, 30
    En faite, comme ça je ne perçois pas l'utilité de la sous-requête et même du GROUP BY.
    Est-ce volontaire ?


    Théoriquement, en faisant une jointure naturelle telle que JOIN, ça devrait grouper les id_entreprises de manière naturelle.
    Il resterait donc juste à faire un trie.
    J'ai peut être pas tout compris ceci dit.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  3. #3
    Membre régulier Avatar de PIEPLU
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    507
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 507
    Points : 92
    Points
    92
    Par défaut
    Yes, pas mal, reste plus qu'à grouper les E.id_entreprise

    Merci
    Vincent Pieplu
    Développeur Site Internet

  4. #4
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Yes, pas mal, reste plus qu'à grouper les E.id_entreprise
    Comment ça grouper le E.id_entreprise ?

    En rajoutant un GROUP BY E.id_entreprise, ça donne quoi ?


    Ce ne serait pas un tri sur E.id_entreprise et dt_avis que tu souhaiterais par hasard ?
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  5. #5
    Membre régulier Avatar de PIEPLU
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    507
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 507
    Points : 92
    Points
    92
    Par défaut
    Pourtant j'ai bien plusieurs fois le meme id_entreprise qui ressort
    Vincent Pieplu
    Développeur Site Internet

  6. #6
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Pourtant j'ai bien plusieurs fois le meme id_entreprise qui ressort
    Oui, je viens de me rencontre que j'ai dis une bêtise.

    La requête d'ailleurs me semblerais plus logique comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT E.nom_entreprise,E.id_entreprise,A.dt_avis
    FROM Avis A
    JOIN Entreprises E ON A.id_entreprise = E.id_entreprise
    WHERE E.ville_entreprise =  'paris'
    AND E.cp_entreprise =  '75015'
    ORDER BY dt_avis DESC 
    LIMIT 0, 30
    Théoriquement ça ne devrait rien changer, c'est juste qu'on perçois mieux que le but 1er est de rechercher des avis, (donc table Avis) qui elle est liée aux entreprises.

    On obiendra bien une liste d'avis, donc potentiellement plusieurs id_entreprises s'il y a plusieurs avis pour 1 entreprise.


    Mais j'ai corrigé mon post plus entre temps, et la question que je me pose serait s'il te faut la liste de tous les avis ou pas ?

    - S'il te faut cette liste des avis, qu'il y ait 1 seul ou plusieurs par entreprise, il ne sera pas possible de faire un regroupement, dans ce cas là il vaut mieux le faire en Php.
    C'est bien souvent un soucis de présentation.
    Sinon il faut faire ça en 2 requêtes imbriquées. Une 1ère qui récupère les entreprises, une 2ème imbriquée pour rechercher les différents avis.

    - S'il te faut juste par exemple 1 seul avis par entreprise, ou par exemple le nombre d'avis par entreprise, là un regroupent sera possible.


    Si tu fais un regroupement sur les entreprise, on obtiendra justement qu'une seule entreprise, et du coup aussi 1 seul avis, et c'est théoriquement le 1er qui sera récupéré.


    Sinon, la question que je posais dernièrement c'est si ce n'était pas un tri sur E.id_entreprise et dt_avis que tu souhaiterais.


    Tout ce ci sauf erreur.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  7. #7
    Membre régulier Avatar de PIEPLU
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    507
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 507
    Points : 92
    Points
    92
    Par défaut
    Merci pour ton implication et ton travail sur mon sujet !!


    bon WE
    Vincent Pieplu
    Développeur Site Internet

Discussions similaires

  1. Optimisation d'une requête SQL
    Par chniter dans le forum Langage SQL
    Réponses: 1
    Dernier message: 17/04/2012, 21h49
  2. Lecture et optimisation d'une requête SQL
    Par jbrasselet dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/10/2007, 15h34
  3. Optimisation d'une requête SQL
    Par Michel601 dans le forum Oracle
    Réponses: 3
    Dernier message: 08/03/2007, 15h17
  4. Optimisation d'une requête SQL
    Par gaboo_bl dans le forum Oracle
    Réponses: 18
    Dernier message: 23/10/2006, 15h33
  5. [MySQL] Optimisation d'une requête sql
    Par fabien14 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/09/2006, 11h45

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