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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Résolu] aide requête SQL: tri par date desc avec date "nulle" en 1er

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] aide requête SQL: tri par date desc avec date "nulle" en 1er

n°1891078
ZeBix
edit > preview
Posté le 03-06-2009 à 18:44:17  profilanswer
 

Bonjour tous,  
 
je suis un peu à la ramasse pour exécuter une requête SQL qui me donne le résultat que je cherche à obtenir.
 
Je simplifie ma table au maximum pour illustrer mon problème :  
Table myitems
Champs=id;mydate
1;2004-01-01 00:00:00
2;2004-02-02 00:00:00
3;0000-00-00 00:00:00

 
C'est une table MySQL qui contient un champ ID numérique et un champ "mydate" au format DATE mysql.
 
Je voudrais une requête qui me trie la table en mode DESC, mais qui afficherait les dates "nulles" (je dis "nulles" mais en fait la valeur défaut est "0000-00-00" ) en premier, c'est-à-dire comme étant considérées comme les plus récentes.
Pour reprendre l'exemple de la table ici, la requête devrait donner dans l'ordre : 3,2,1
 
La requête :  

Code :
  1. SELECT id,mydate FROM myitems ordre BY mydate DESC


me donne évidemment 2,1,3
 
Alors j'ai essayé de passer la date par défaut à 2038-01-19 (genre le maximum d'un timestamp 32 bits si je ne m'abuse) mais ça fout un bronx pas possible dans mon code, où je fais plusieurs tests voir si la date existe ou pas et je l'affiche en conséquence ou j'affiche un message différent s'il n'y en a pas;
J'ai essayé de rendre le champs mydate nullable (default value NULL) , NULL se comporte aussi comme une date plus ancienne.
 
Je suppose que je peux faire des trucs plus complexes du genre mettre tous mes résultats dans une array (style en PHP) et puis prendre ceux que je veux dans l'ordre qui me plaît, mais y aurait-il un moyen d'obtenir l'ordre que je désire (pas de date -> date plus récente -> date plus ancienne), directement depuis une commande SQL ?


Message édité par ZeBix le 17-06-2009 à 11:43:57
mood
Publicité
Posté le 03-06-2009 à 18:44:17  profilanswer
 

n°1891226
guybrush02
Posté le 04-06-2009 à 11:34:15  profilanswer
 

Tu peux essayer un truc genre :

 

SELECT id,mydate, IF(mydate,mydate,4294967295) as myseconddate FROM myitems ORDER BY myseconddate DESC

Message cité 1 fois
Message édité par guybrush02 le 04-06-2009 à 11:34:43
n°1891260
casimimir
Posté le 04-06-2009 à 12:18:28  profilanswer
 

ca n'existe pas en mysql?

 
Code :
  1. SELECT id,mydate FROM myitems ordre BY mydate DESC nulls first

Message cité 2 fois
Message édité par casimimir le 04-06-2009 à 12:18:40
n°1891261
casimimir
Posté le 04-06-2009 à 12:18:56  profilanswer
 

casimimir a écrit :

ca n'existe pas en mysql (je suis full oracle)?
 

Code :
  1. SELECT id,mydate FROM myitems ordre BY mydate DESC nulls first



n°1891270
guybrush02
Posté le 04-06-2009 à 12:42:26  profilanswer
 

Je ne pense pas qu'y a ça en mysql. Y a ptete moyen de faire un ORDER BY mydate=0, mydate DESC. Aucune idée... :s
 
Par contre, si son champ date est indexé, ça peut valoir la peine de ne pas perdre l'index (comme dans ma solution).  
Je pense à un truc du genre :
SELECT id, mydate, CASE mydate WHEN 0 THEN 1 ELSE 0 as sortkey FROM myitems ORDER BY sortkey DESC, mydate DESC
 
Mais je ne suis pas sûr que ça profite de l'index (et c'est pas "très beau" ^^)
 
 

n°1896186
ZeBix
edit > preview
Posté le 17-06-2009 à 11:43:19  profilanswer
 

Sorry pour la réaction tardive, j'avais un peu laissé passer le sujet !
 

casimimir a écrit :

ca n'existe pas en mysql?
 

Code :
  1. SELECT id,mydate FROM myitems ordre BY mydate DESC nulls first



Je viens d'essayer, ça n'existe pas en MySQL. Et c'est bien dommage car c'est exactement ce que je voudrais !  
 

guybrush02 a écrit :

Tu peux essayer un truc genre :  
 
SELECT id,mydate, IF(mydate,mydate,4294967295) as myseconddate FROM myitems ORDER BY myseconddate DESC


 
ça marche NICKEL ! merci beaucoup c'est exactement ça. Et je peux toujours utiliser mydate qui reste donc bien NULL en cas de besoin :)
Et je m'en fous de l'index, ma table est pas trop grosse ...  
 
merci à toi guybrush (Threepwood) !


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

  [Résolu] aide requête SQL: tri par date desc avec date "nulle" en 1er

 

Sujets relatifs
Aide MAJ liste chainéeRequête d'aggregation
AIDE créer une page en INTRANET[Résolu-BATCH] aide sur la commande for /f delims
[Resolu]Code qui passe toujours dans le IF[RESOLU]Problème de lecture de fichier tout bête
Requete dans plusieurs tables [resolu][Resolu]Controle de saisie Adresse IP sur un formulaire
Plus de sujets relatifs à : [Résolu] aide requête SQL: tri par date desc avec date "nulle" en 1er


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