Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1664 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] ORDER BY selon préférence

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] ORDER BY selon préférence

n°2220524
tomware
Moteur à eau
Posté le 23-02-2014 à 14:06:42  profilanswer
 

Bonjour,
 
Je voudrais afficher tout un catalogue de livres dont certains produits en vente flash dans l'ordre suivant :
 
-------- heure croissante jusqu'a minuit-------------------------------------------------
1) Babar (vente flash ! expire aujourd'hui a 17h)  
2) Le roi lion (vente flash ! expire aujourd'hui a 18h)
3) La petite sirène (vente flash ! expire aujourd'hui a 23h)
-------- heure décroissante le dernier a avoir eu une vente flash est en priorité -----------
4) Aladin (pas une vente flash mais ca l'a été hier a 16h)
5) La belle et la bête (pas une vente flash mais ca l'a été hier a 15h)
-------- les autres livres s'affichent aussi selon leur ID décroissant ------------------------
6) Les aristochats (jamais été une vente flash)
7) Boule et Bill (jamais été une vente flash)
etc...
 
J'ai une table "livre" avec un champ "expiration" en DATETIME.
Par exemple si je veux que Babar soit en vente flash je mets a jour le datetime dans expiration. Et étant donné mon ORDER BY cela s'affichera tout de suite en tête des résultats.
 
Quelqu'un aurait une idée pour construire cette requête SQL ?  
 
Merci  :hello:


Message édité par tomware le 23-02-2014 à 14:14:07
mood
Publicité
Posté le 23-02-2014 à 14:06:42  profilanswer
 

n°2220578
Oliiii
Posté le 24-02-2014 à 13:40:59  profilanswer
 

Code :
  1. Select *
  2. From livre
  3. Order By CASE WHEN Expiration >= GETDATE() THEN Expiration ELSE 99999 END Asc
  4.    , CASE WHEN Expiration < GETDATE() THEN Expiration ELSE 0 END Desc
  5.    , ID


 
Éventuellement changer le 0 et 99999 en autre chose si ça pose problème dans les cas limite.
 
Testé avec ca comme données:

Code :
  1. INSERT livre (Titre, Expiration) VALUES ('Les Aristochats', NULL)
  2. INSERT livre (Titre, Expiration) VALUES ('Babar', '2014-02-24 17:00')
  3. INSERT livre (Titre, Expiration) VALUES ('Boule et Bill', NULL)
  4. INSERT livre (Titre, Expiration) VALUES ('Le Roi Lion', '2014-02-24 18:00')
  5. INSERT livre (Titre, Expiration) VALUES ('La petite Sirène', '2014-02-24 23:00')
  6. INSERT livre (Titre, Expiration) VALUES ('La belle et la bete', '2014-02-23 15:00')
  7. INSERT livre (Titre, Expiration) VALUES ('Aladin', '2014-02-23 16:00')


 
Et ca donne:

Code :
  1. Babar
  2. Le Roi Lion
  3. La petite Sirène
  4. Aladin
  5. La belle et la bete
  6. Les Aristochats
  7. Boule et Bill

n°2220627
tomware
Moteur à eau
Posté le 24-02-2014 à 17:42:40  profilanswer
 

Oliiii
 
 [:pedrolito37skyblog]  [:xplosif]  [:hello]  [:el awrence]  
 
 [:swedish chef]  
 
Ca marche PAR-FAITE-MENT grace a toi !
 
MERCI

n°2220628
tomware
Moteur à eau
Posté le 24-02-2014 à 17:44:07  profilanswer
 

Au fait a quoi correspond  ELSE 99999 et ELSE 0 ?

n°2220679
Oliiii
Posté le 25-02-2014 à 07:56:06  profilanswer
 

C'est pour "ignorer" les lignes qui ne doivent pas être triée par cette étape du order by.
 
99999 pour mettre ce qui n'est pas en flash sale en dessous des flash sale (en supposant que 99999 sera la plus grande date dans la table).
0 Pour mettre les flash sale au dessus (en supposant que 0 est plus petit que la plus petite date dans la table).
 
Tout le truc n'est nécessaire que parce que tu veux trier les flash sale en ordre descendant et les vielles flash sale en ordre ascendant (ce qui est logique d'un point de vue marketing).
Sans ça tu aurais pu t'en sortir plus facilement avec juste un Order By Expiration Desc, ID.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] ORDER BY selon préférence

 

Sujets relatifs
[RESOLU] REQUETE SQL AVEC ID ET ORDERSqL - requête
[SQL] on duplicate key updateRequete SQL en VBA avec Excel
SQL : count multiple, groupby...Pont entre ciel gestion commercial et SQL/php - OU Access voir autre..
Probleme de comptage (SQL Oracle)[MSSQL][T-SQL] résultat de 2 requêtes dans un mail
Sql count multiples 
Plus de sujets relatifs à : [SQL] ORDER BY selon préférence


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR