Partage
  • Partager sur Facebook
  • Partager sur Twitter

[MySql] Tri sur 2 colonnes

Non pas un ORDER BY champ1, champ2

    19 janvier 2011 à 14:47:52

    Bonjour à la communauté et... bonne année !!!!

    J'aimerais trier les résultats de ma requête en fonction de 2 colonnes.

    La première colonne qu'on appellera tarif_produit_promo et la 2eme s'appelle tarif_de_base.

    J'aimerais donc afficher tous les produits en promo en premier et par ordre croissant si la valeur existe, puis viennent ensuite les produits... pas en promo, toujours par ordre croissant sachant que tous les produits on un prix de base.

    ORDER BY tarif_produit_promo, tarif_de_base
    


    Ca ne fonctionne pas puisque ORDER croise les valeurs.
    J'ai essayé LEAST, les requêtes imbriquées (SELECT (SELECT)), non plus... à moins que je les ai mal utilisées.

    Merci de votre aide
    • Partager sur Facebook
    • Partager sur Twitter
      19 janvier 2011 à 15:35:26

      Quand tarif_produit_promo n'existe pas, je suppose qu'il est NULL, donc :

      ORDER BY tarif_produit_promo IS NULL, COALESCE(tarif_produit_promo, tarif_de_base)
      • Partager sur Facebook
      • Partager sur Twitter
        19 janvier 2011 à 18:01:36

        Woah Super Merci Lord Vador.

        En fait, ca marche bien car j'ai transformé la base en fonction de tes specs.

        Je m'explique; c'est une ancienne base, et le champ 'tarif_produit_promo' n'est pas NULL mais égal à 0 lorsqu’il n'y a pas de promo (pour la petite histoire... :euh: ).

        Pour le test j'ai remplacé les valeurs à 0 par NULL et effectivement ça fonctionne. Mais pas qd les valeur = 0.
        Malheureusement dû au système d'import ça ne peux pas être définitivement NULL.

        Aurait tu la solution ?


        D'avance merci beaucoup !!
        • Partager sur Facebook
        • Partager sur Twitter
          19 janvier 2011 à 18:57:02

          ha, ha, la bonne vieille manie du "0 ce n'est pas zéro mais... un truc !"

          ORDER BY tarif_produit_promo !=0, IF(tarif_produit_promo,tarif_produit_promo,tarif_de_base)

          à vérifier la syntaxe du IF() de mysql, je suis pas sûr...

          tarif_produit_promo !=0 vaut 0 si tarif_produit_promo=0 et 1 sinon, 0 se trie avant 1, donc ça sépare les promo et sans promo

          • Partager sur Facebook
          • Partager sur Twitter
            20 janvier 2011 à 10:59:20

            Bonjour Lord,

            Alors j'ai bien essayé... mais presque ! :D

            En fait, après moult essais, il s'avère que le meilleur résultat est :


            ORDER BY tarif_de_base !=0, IF(tarif_produit_promo,tarif_produit_promo,tarif_de_base)
            


            Cependant, il reste que les résultats ne sont pas complètement triés. J'ai qd mm des valeurs croisées.
            J'ai l'impression qu'avec cette méthodes, il prend la plus petites des valeur (entre tarif_produit_promo et tarif_de_base) et qu'il m'affiche le tout en ordre croissant.

            Et du coté de CASE ? j'ai regardé mais je cherche encore la syntaxe...

            merci et que l'achtuche nanani nanana :p
            • Partager sur Facebook
            • Partager sur Twitter

            [MySql] Tri sur 2 colonnes

            × 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