billcom Posté 25 Avril 2014 Posté 25 Avril 2014 Bonjour le hub, Je bloque sur une requête sql pour MYSQL. J'ai une liste d'evenement avec un id "id_ev" et une date de début type DATE "date_deb_ev". Certains évènements sont déjà passé et d'autre sont à venir. J'aimerai écrire une requête qui me permet d'afficher l'ensemble des évènements avec pour ordre d'affichage Dans un premier temps les évènements à venir trié par date_deb_ev ASC et ensuite les évènement passé par date_deb_ev DESC le tout en une seule requête Pour le moment j'ai ça SELECT id_ev, date_deb_ev FROM evenements ORDER BY CASE WHEN date_deb_ev >= CURDATE() THEN 0 ELSE 1 end ASC, id_ev ASC +-------+-------------+ | id_ev | date_deb_ev | +-------+-------------+ | 59 | 2014-04-30 | | 106 | 2014-05-23 | | 110 | 2014-04-26 | | 146 | 2014-05-21 | | 147 | 2014-04-30 | | 156 | 2014-04-26 | | 172 | 2014-04-30 | | 175 | 2014-05-23 | | 202 | 2014-05-21 | | 224 | 2014-05-27 | | 226 | 2014-05-27 | | 227 | 2014-05-28 | | 242 | 2014-05-21 | | 243 | 2014-04-28 | | 254 | 2014-04-26 | | 266 | 2014-04-30 | | 267 | 2014-04-30 | | 268 | 2014-05-24 | | 270 | 2014-06-18 | | 278 | 2014-04-30 | +-------+-------------+ 20 rows in set (0.04 sec) ça me retourne un resultat mais rien de cohérent avez vous une idée ou une piste pour mener à bien ma requête ?
BouleBilll Posté 25 Avril 2014 Posté 25 Avril 2014 (modifié) Bonjour , Tu ordonnes tes dates en te basant sur ton champ id_ev , Base toi sur tes dates , essaye le code suivant : SELECT id_ev, date_deb_ev FROM test.evenements ORDER BY CASE WHEN date_deb_ev >= CURDATE() THEN 0 ELSE 1 end ASC, date_deb_ev ASC Modifié 25 Avril 2014 par BouleBilll
billcom Posté 25 Avril 2014 Auteur Posté 25 Avril 2014 Salut BouleBill, Merci la solution est bonne Et pour faire un tri des évènements à venir en date_dev_ev ASC et les évènements passé date_deb_ev DESC tu aurai une idée ?
Solution billcom Posté 28 Avril 2014 Auteur Solution Posté 28 Avril 2014 Version définitive de la requête SELECT id_ev, date_deb_ev FROM evenements ORDER BY CASE WHEN date_deb_ev >= CURDATE() THEN 0 ELSE 1 end ASC, ABS(DATEDIFF(date_deb_ev, CURDATE())) ASC
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant