optimisation de requéte

optimisation de requéte - SQL/NoSQL - Programmation

Marsh Posté le 26-04-2008 à 11:54:07    

Bonjour.
 
Travaillant actuellement sur le développement de la partie statistique d'un back-office, je n'arrive pas à trouver la requête miracle qui m'évitera d'avoir à procéder par étapes.
 
But recherché: savoir, parmi les clients qui ont commandés sur un mois donné, ceux qui en sont à leur première commande, ceux qui en sont à leur 2e, à leur 3e, à leur 4e ou à 5 et +.
 
Actuellement, je procéde ainsi
 
SELECT a.id_client, COUNT( DISTINCT b.id_commande ) AS nb_commandes
FROM commande a
INNER JOIN commande b ON ( a.id_client = b.id_client
AND b.date_commande < "2008-04-01 00:00:00" )
WHERE a.date_commande
BETWEEN "2008-03-01 00:00:00"
AND "2008-03-31 23:59:59"
GROUP BY a.id_client
HAVING nb_commandes=1
 
pour connaitre les clients ayant commandés en mars qui n'en sont qu'à leur première commande, puis je regarde le nombre de réponses retournées (j'ai bien essayé d'envelopper la requéte dans un SELECT COUNT() général, mais j'ai un message d'erreur et passe donc par l'instruction php mysql_num_rows).
 
Comme je veux 5 nombres, je répéte l'opération 5 fois, en changeant chaque fois la condition de mon
 
HAVING nb_commandes
 
Y'aurait-il moyen d'optimiser tout ça pour obtenir le résultat souhaité en une seule et unique requéte?
 
Merci d'avance.
 
P.S.: le serveur est en MySQL 4.0.2, donc sous-requétes impossibles.

Reply

Marsh Posté le 26-04-2008 à 11:54:07   

Reply

Marsh Posté le 26-04-2008 à 12:29:06    

HAVING nb_commandes >= 2  
ORDER BY nb_commandes
 
?


Message édité par sielfried le 26-04-2008 à 12:36:22

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed