aide requête SQL: tri par date desc avec date "nulle" en 1er [Résolu] - SQL/NoSQL - Programmation
Marsh Posté le 04-06-2009 à 11:34:15
Tu peux essayer un truc genre :
SELECT id,mydate, IF(mydate,mydate,4294967295) as myseconddate FROM myitems ORDER BY myseconddate DESC
Marsh Posté le 04-06-2009 à 12:18:28
ca n'existe pas en mysql?
Code :
|
Marsh Posté le 04-06-2009 à 12:18:56
casimimir a écrit : ca n'existe pas en mysql (je suis full oracle)?
|
Marsh Posté le 04-06-2009 à 12:42:26
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" ^^)
Marsh Posté le 17-06-2009 à 11:43:19
Sorry pour la réaction tardive, j'avais un peu laissé passer le sujet !
casimimir a écrit : ca n'existe pas en mysql?
|
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 : |
ç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) !
Marsh Posté le 03-06-2009 à 18:44:17
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 :
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