Partage
  • Partager sur Facebook
  • Partager sur Twitter

Lister des données dans un certain ordre suivant..

la date

Sujet résolu
    22 mai 2019 à 15:47:12

    Bonjour,

    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.

    Quelqu'un aurait-il une idée pour arriver à ça ?

    • Partager sur Facebook
    • Partager sur Twitter
      22 mai 2019 à 15:59:59

      Salut,

      Par rapport par à la date d'aujourd'hui ?

      -
      Edité par WillyKouassi 22 mai 2019 à 16:00:17

      • Partager sur Facebook
      • Partager sur Twitter
      le bienfait n'est jamais perdu
        22 mai 2019 à 16:12:55

        Salut WillyKouassi

        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.

        • Partager sur Facebook
        • Partager sur Twitter
          22 mai 2019 à 16:14:47

          Bonjour.

          Avec la clause ORDER BY par exemple.

          • Partager sur Facebook
          • Partager sur Twitter

          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.

            22 mai 2019 à 16:21:00

            Lartak a écrit:

            Bonjour.

            Avec la clause ORDER BY par exemple.


            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

            Mais bien sûr cela ne marche pas

            -
            Edité par djkori 22 mai 2019 à 18:20:15

            • Partager sur Facebook
            • Partager sur Twitter
              22 mai 2019 à 19:19:47

              Salut ,

              SELECT DATEDIFF(now(),'depart') as nbjours ORDER By nbjours DESC

              • Partager sur Facebook
              • Partager sur Twitter
                22 mai 2019 à 20:39:28

                armel.mc a écrit:

                Salut ,

                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...

                -
                Edité par djkori 22 mai 2019 à 20:40:13

                • Partager sur Facebook
                • Partager sur Twitter
                  22 mai 2019 à 21:12:16

                  On peut avoir un schéma clair de ce que tu veux obtenir avec des dates en exemple puisque le ORDER BY ne semble pas convenir.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  le bienfait n'est jamais perdu
                    22 mai 2019 à 22:06:09

                    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 22 mai 2019 à 22:11:34

                    • Partager sur Facebook
                    • Partager sur Twitter
                      23 mai 2019 à 20:31:19

                      armel.mc a écrit:

                      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):

                      Liste des dossiers à venir

                      Et cette liste en dessous de toute la liste ci-dessus (en fin de liste):

                      Liste des dossiers terminés

                      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:

                      Liste actuelle


                      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

                      • Partager sur Facebook
                      • Partager sur Twitter

                      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.
                      • Editeur
                      • Markdown