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 :

Probleme exécution requête


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 6
    Par défaut Probleme exécution requête
    Bonjour à tous,
    J'ai un souci avec une requête SQL.
    Celle-ci s'exécute mais j'obtient le résultat au bout de 5minutes (le serveur est bien ralentit pendant ce temps la).
    Mon problème est que je ne vois pas comment l'optimiser.

    Cette requête doit me renvoyer les dates ou ,au moins, un produit appartenant à la catégorie 183 a été acheté. L'utilisateur sélectionne le mois et l'année où la recherche doit s'effectuer.

    Voici mon code en php :
    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
     
      if ($_POST['mois'] || $_POST['annee'])
      {
    	  $query = "SELECT DATE(o.date_purchased) as maDate, DAY(o.date_purchased) as day, MONTH(o.date_purchased) as month, YEAR(o.date_purchased) as year ";
    	  $query .= 'FROM ' . TABLE_ORDERS . ' o INNER JOIN ' . TABLE_ORDERS_PRODUCTS .  ' op on o.orders_id = op.orders_id INNER JOIN ' . TABLE_PRODUCTS . ' p on op.products_id = p.products_id INNER JOIN ' . TABLE_PRODUCTS_TO_CATEGORIES . ' pc on p.products_id = pc.products_id INNER JOIN ' . TABLE_CATEGORIES  . ' c on pc.categories_id = c.categories_id ';
    	  $query .= 'and c.parent_id = 183 '; 
     
    	  if ($_POST['mois'])
    	  {
    		$query .= 'and MONTH(o.date_purchased) = ' . $_POST['mois'] . ' ';
    	  }
     
    	  if ($_POST['annee'])
    	  {
    		$query .= 'and YEAR(o.date_purchased) = ' . $_POST['annee'] . ' ';
    	  }
    	  $query .= 'group by DATE(o.date_purchased) ';
    	  $query .= 'order by DAY(o.date_purchased)';
     
    	  $livre_array = tep_db_query($query);
    	  $num_result = tep_db_num_rows($livre_array);
      }
    En espérant que vous pourrez m'aider, merci d'avance.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 144
    Par défaut
    T'as des index dans tes tables ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 6
    Par défaut
    Oui il y a des index :
    Pour la table orders : index = orders_id, customers_id
    Pour la table orders_total : index = orders_id, orders_total_id
    Pour la table products : index = products_id

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 144
    Par défaut
    Le mieux est d'afficher ta requête finale et de lui passer un coup d'EXPLAIN (qui doit être dispo dans à peu près tous les SGBD) pour voir ce qui prend du temps et optimiser ça.

    C'est quoi comme base derrière ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 6
    Par défaut
    Je ne t'ai pas remercier tout a l'heure donc merci.

    Je bosse sous mysql en local et sur un site (je fais tout en local avant d'envoyer en production).

    Je ne connais pas du tout EXPLAIN, pourrais tu m'expliquer si tu as le temps stp.
    En fait, j'exécute ma requête et c'est après que j'utilise le EXPLIAN?

    encore merci

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 144
    Par défaut
    http://dev.mysql.com/doc/refman/5.0/fr/explain.html

    En gros tu colles juste un EXPLAIN devant le SELECT.

Discussions similaires

  1. [SQL-SERVER] Déconnecter user d'une BD probleme de requête
    Par Sytchev3 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 07/06/2006, 08h19
  2. [SQL] probleme de requête
    Par Le Rebel dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 15/02/2006, 11h52
  3. erreur exécution requête
    Par MANU_2 dans le forum Bases de données
    Réponses: 4
    Dernier message: 13/10/2005, 07h27
  4. exécuter requête au clic sur valider
    Par rangernoir dans le forum Access
    Réponses: 6
    Dernier message: 09/09/2005, 15h01
  5. Probleme de requête SQL
    Par breizhoo dans le forum Langage SQL
    Réponses: 1
    Dernier message: 30/08/2005, 22h22

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