J'ai besoin de lister les données d'une liste d'une forme particulière suivant la date.
Chaque entrée a une date, je voudrais que quand la date est passée, les entrées s'affichent en fin de liste en bas en ordre descendant et quand la date est à venir que ça s'affiche en début de liste en ordre ascendant. Est-il possible de traiter ça directement dans la requête ? Ou bien lors du traitement php ?
J'ai eu beau ressasser ça, j'ai pas trouvé de solution jusqu'à maintenant.
Oui, en effet, par rapport à la date d'aujourd'hui.
Chaque entrée est un dossier voyageur avec une date d'arrivée et une date de départ. Quand la date de départ est dépassée par rapport à la date d'aujourd'hui, le dossier est terminé et doit s'afficher comme tel mais j'ai besoin de l'afficher avec les dossier en cours ou à venir, mais en fin de liste en ordre descendant alors que le reste (dossiers en cours et à venir) doit s'afficher en début de liste en ordre ascendant.
Salut Lartak, oui, bien sûr, mais ça va m'afficher la totalité des entrées dans l'ordre en question, que ce soit ASC ou DESC, pas de faire une différenciation entre certaines entrées et pas d'autres.
Du coup j'ai tenté avec des conditions dans la requête, ce qui serait le plus logique, d'avoir une liste déjà toute ordonnée au résultat de la requête, mais je n'y arrive pas encore.
Après avoir vu quelques topics sur le net, j'ai tenté ceci :
SELECT * FROM table ORDER BY G.depart_groupe
CASE G.depart_groupe
WHEN G.depart_groupe<DATE(?) THEN DESC
ELSE ASC
END CASE
SELECT DATEDIFF(now(),'depart') as nbjours ORDER By nbjours DESC
Salut, merci pour le retour, mais ben non ça ne marche pas, ça me liste la totalité dans un ordre, mais ne fait pas la différenciation si date dépassé ou pas...
SELECT * FROM table ORDER BY
( CASE G.depart_groupe WHEN G.depart_groupe< NOW() THEN G.depart_groupe END ) ASC, -- dossiers en cours et à venir en ordre ascendant en tête de liste
( CASE G.depart_groupe WHEN G.depart_groupe >= NOW() THEN G.depart_groupe END ) DESC; --dossier terminé en bas de liste
SELECT * FROM table ORDER BY
( CASE G.depart_groupe WHEN G.depart_groupe< NOW() THEN G.depart_groupe END ) ASC, -- dossiers en cours et à venir en ordre ascendant en tête de liste
( CASE G.depart_groupe WHEN G.depart_groupe >= NOW() THEN G.depart_groupe END ) DESC; --dossier terminé en bas de liste
- Edité par armel.mc il y a environ 21 heures
Bonjour,
Bien joué, la requête marche et la liste s'affiche mais le résultat n'est pas celui escompté... snif.
Les entrées sont toutes mélangées les unes avec les autres, les dates soient-elles dépassées ou pas... mais listées effectivement dans l'ordre demandé, soit ASC, soit DESC... du coup, ça ne marche pas comme imaginé.
En tout cas, cette argument conditionnel dans la requête est intéressante pour d’autres types de requêtes dans le futur, je le garde dans la manche.
La solution doit exister. Peut être dans le traitement php alors... ?
@WillyKouassi
Voici un peu ce que je souhaite :
Cette liste ici en haut de liste, les dossiers arrivant prochainement en haut de liste (liste en ASC):
Et cette liste en dessous de toute la liste ci-dessus (en fin de liste):
Alors qu'en ce moment j'ai ceci, la liste commence par les plus lointains (dans x mois) pour aller vers les plus proches puis les terminés... comme ceci:
L'idée est de classer les terminés en bas (ceux qu'on va le moins consulter) pour mettre en valeur les autres, en commençant par les plus proches, en début de liste...
[Edit] Ou bien alors deux requêtes distinctes, une pour les entrées à venir, une autre pour les entrées passées et on colle les tableaux obtenus ? Je vais tester.
[Re-edit après test de deux requêtes avec résultats assemblés dans un seul et même array()]
Et bien c'était ça la solution la plus pratique, deux requêtes distinctes et on génère un seul et même tableau avec les résultats de ces requêtes pour ensuite générer le html avec l'ensemble des résultats.
Sans doute pas la plus optimisée ni la plus élégante des manières car j'ai une requête supplémentaire mais selon les résultats que j'obtiens en millisecondes, avec deux requêtes c'est généré en 0.055642127990723 sec. et avec une requête en 0.045878887176514 sec. , la différence est imperceptible.
Mais si quelqu'un a une meilleure solution, je suis preneur bien sûr
- Edité par djkori 24 mai 2019 à 18:58:40
Lister des données dans un certain ordre suivant..
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.