Version complète: sur le forum Webmaster Hub : Ne récupérer que la commande la plus récente
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > SQL
toma
Bonjour,

Je me trifouille les neurones mais là je bute sur un truc à la noix. J'ai une table composée comme ceci :

commandes
commandes_date
customers_id

Voici un résultat d'un SELECT sur tout :

CODE
commandes_date     customers_id
2008-07-15              60
2008-08-17              60
2008-06-12              65
2008-06-07              70
2008-09-21              70


J'exporte le tout dans un fichier csv.
Mon but est de conserver uniquement la commande la plus récente pour un customers_id donné.

Si quelqu'un peut me filer un coup de main ce serait bien apprécié parce que là je bute.
Merci d'avance !
toma
en fait je me demande s'il est possible de faire cela avec la requête SQL... peut-être faut-il gérer ceci en PHP ?
rdd
Bonjour,

CODE
SELECT MAX(commandes_date) AS date_commande FROM ta_table WHERE customers_id=60


Devrait te retourner la date la plus recente pour le customers_id 60
toma
En fait voici ma requête, car il faut aussi que je fasse un WHERE sur le statut, pour ne récupérer que les commandes qui ont été validées :

CODE
SELECT * FROM customers c, commandes co WHERE c.customers_id=co.customers_id AND co.commandes_status='1' ORDER BY c.customers_id ASC


Je ne fais pas de WHERE sur un seul id.
Portekoi
SQL
SELECT
MAX(commandes_date) AS date_commande, customers_id
FROM commandes WHERE commandes_status='1'
Group by
customers_id
toma
mmm merci pour le tuyau. Effectivement, ça ne me retourne que la commande la plus récente pour chaque customers_id dont la commande a le statut à 1.
Mais ça ne me retourne que les champs date_commande et customers_id. je voudrais aussi récupérer toutes les coordonnées des customers (ds la table correspondante) et j'ai essayé avec ceci :

CODE
SELECT MAX( commandes_date ) AS date_commande, c.customers_id, c.customers_prenom
FROM commandes co, customers c
WHERE co.commandes_status = '1'
AND co.customers_id = c.customers_id
GROUP BY customers_id


Et ça a l'air de marcher... je suis fébrile...
Portekoi
SQL
SELECT MAX( commandes_date ) AS date_commande, c.customers_id, c.customers_prenom
FROM commandes co, customers c
WHERE co.commandes_status = '1' AND co.customers_id = c.customers_id
GROUP BY c.customers_id, c.customers_prenom


Pour info : tous les champs placés dans le "SELECT" et qui ne sont pas entourés d'une fonction type SUM, AVERAGE, MAX, MIN etc... doivent être présente dans le GROUP BY
toma
Ah bon ? Mais qu'est-ce que cela change ?
Portekoi
Normalement, si tu fais ceci :

SQL
SELECT MAX( commandes_date ) AS date_commande, c.customers_id, c.customers_prenom
FROM commandes co, customers c
WHERE co.commandes_status = '1' AND co.customers_id = c.customers_id
GROUP BY customers_id


Tu dois avoir une erreur sur le "c.customers_prenom" car il n'est pas présent dans le group by.

Pour info : http://dev.mysql.com/doc/refman/5.0/fr/gro...den-fields.html

Donc pour Mysql, le c.customers_prenom est "implicite" mais à manier avec précaution.


Portekoi
toma
Hummm ok, intéressant à savoir. Il faudra que je me trouve un livre pour potasser tout ça, car dans les mois à venir je vais avoir à faire des requêtes de plus en plus complexes... Quelqu'un a une bonne référence de livre plutôt "pratique" que théorique ?
Portekoi
Google est ton ami smile.gif

http://sql.developpez.com/
toma
Formidable merci pour le lien, et pour sûr que Google est mon ami smile.gif
Thanks again.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.