toma Posté 8 Octobre 2008 Posté 8 Octobre 2008 (modifié) 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 : commandes_date customers_id2008-07-15 602008-08-17 602008-06-12 652008-06-07 702008-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 ! Modifié 8 Octobre 2008 par Dan Inutile de mettre [SOLVED] ou [RESOLU] dans le titre. Dan
toma Posté 8 Octobre 2008 Auteur Posté 8 Octobre 2008 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 Posté 8 Octobre 2008 Posté 8 Octobre 2008 (modifié) Bonjour, 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 Modifié 8 Octobre 2008 par rdd
toma Posté 8 Octobre 2008 Auteur Posté 8 Octobre 2008 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 : 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 Posté 8 Octobre 2008 Posté 8 Octobre 2008 SELECT MAX(commandes_date) AS date_commande, customers_id FROM commandes WHERE commandes_status='1'Group by customers_id
toma Posté 8 Octobre 2008 Auteur Posté 8 Octobre 2008 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 : SELECT MAX( commandes_date ) AS date_commande, c.customers_id, c.customers_prenomFROM commandes co, customers cWHERE co.commandes_status = '1'AND co.customers_id = c.customers_idGROUP BY customers_id Et ça a l'air de marcher... je suis fébrile...
Portekoi Posté 8 Octobre 2008 Posté 8 Octobre 2008 SELECT MAX( commandes_date ) AS date_commande, c.customers_id, c.customers_prenomFROM commandes co, customers cWHERE co.commandes_status = '1' AND co.customers_id = c.customers_idGROUP 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
Portekoi Posté 9 Octobre 2008 Posté 9 Octobre 2008 Normalement, si tu fais ceci : SELECT MAX( commandes_date ) AS date_commande, c.customers_id, c.customers_prenomFROM commandes co, customers cWHERE co.commandes_status = '1' AND co.customers_id = c.customers_idGROUP 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 Posté 9 Octobre 2008 Auteur Posté 9 Octobre 2008 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 ?
toma Posté 9 Octobre 2008 Auteur Posté 9 Octobre 2008 Formidable merci pour le lien, et pour sûr que Google est mon ami Thanks again.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant