Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tri croissant, 0 à la fin

    6 janvier 2011 à 13:29:11

    Bonjour,

    J'ai un site marchand. A l'affichage d'une catégorie, les articles sont pour le moment triés par ordre alphabétique.
    Quand un article est épuisé (quantité <=0) au lieu du bouton "Acheter", j'ai une image "Epuisé". Du coup, quand dans une catégorie, j'ai pas mal d'articles épuisés, ceux qu'on peut acheter se retrouvent noyés au milieu des épuisés.

    J'aimerai donc afficher en premier, par ordre alphabétique ceux qui ont une quantité >0, puis les autres, par ordre alphabétiques aussi.

    Je ne peux donc pas juste trier par quantité, ne voulant pas spécialement mettre en avant les produits que j'ai le plus en stock.

    Je simplifie la requete que j'ai actuellement par celle ci-dessous (en réalité y'a des jointures et tout, mais ce n'est pas le problème vu que c'est dans le ORDER BY que je ne trouve pas) :
    <?
    $sql="SELECT nom,qte FROM products WHERE cat=$cat ORDER BY nom";
    ?>
    


    Merci d'avance !
    • Partager sur Facebook
    • Partager sur Twitter
      6 janvier 2011 à 13:31:10

      SELECT nom,qte FROM products WHERE cat=$cat ORDER BY nom ASC,qte desc
      
      • Partager sur Facebook
      • Partager sur Twitter
        6 janvier 2011 à 18:23:12

        Salut, et merci
        Si je fais ta requête, j'aurai cet ordre:

        Nom - Qte
        ABA - 0
        BAB - 8
        BAB - 0
        CAB - 9
        DAB - 2

        Hors il me faudrait

        Nom - Qte

        BAB - 8
        CAB - 9
        DAB - 2
        ABA - 0
        BAB - 0


        Tu vois ce que je veux dire ?
        • Partager sur Facebook
        • Partager sur Twitter
          6 janvier 2011 à 18:55:40

          Et en inversant l'ordre ?
          ... WHERE qte DESC, nom ASC
          
          • Partager sur Facebook
          • Partager sur Twitter
          Erreur PDO - Installation Wamp - Docs PHP et MYSQL.
            11 janvier 2011 à 11:54:08

            En inversant l'ordre ça ne résout pas le problème.
            Les articles seront dans classés de l'article ayant le plus de stocks à celui en ayant le moins, et si certains ont la même quantité, ils seont classé par ordre alphabétique.

            J'aurai ça :

            Tab 8
            Lab 6
            Sub 6
            Paf 3
            Lac 0

            Alors qu'il faudrait

            Lab 6
            Paf 3
            Sub 6
            Tab 8
            Lac 0

            Non, ce qu'il me faut c'est une requète avec une condition, mais je ne sais pas le faire.
            • Partager sur Facebook
            • Partager sur Twitter
              11 janvier 2011 à 21:42:37

              Perso je séparerai les deux jeux de données (=0 et <>0), puis je ferai un UNION pour récupérer le résultat final

              SELECT nom, qte
              FROM products
              WHERE cat=$cat
              	AND qte <> 0
              ORDER BY nom, qte desc
              
              UNION
              
              SELECT nom, qte
              FROM products
              WHERE cat=$cat
              	AND qte = 0
              ORDER BY nom
              


              (Je ne suis pas sûr que ça fonctionnera, peut-être que MySQL va râler à cause des ORDER BY et UNION)

              Une autre solution:

              SELECT nom, qte, qte <> 0 AS order_field
              FROM products
              WHERE cat=$cat
              ORDER BY qte <> 0, nom, qte DESC
              


              (Je ne sais pas si MySQL oblige les champs de ORDER BY à se trouver dans SELECT, mais la norme oui donc je l'ai fait :p)
              • Partager sur Facebook
              • Partager sur Twitter
                11 janvier 2011 à 23:29:47

                Perso je mettrais :

                SELECT *
                FROM products
                WHERE cat=$cat
                ORDER BY (NOT qte), nom
                


                Pour avoir les ruptures de stock à la fin...
                • Partager sur Facebook
                • Partager sur Twitter

                Tri croissant, 0 à la fin

                × 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