option de tri dans une requête mysql
26 messages
• Page 1 sur 2 • 1, 2
- atomikado
- WRInaute discret

- Messages: 160
- Inscription: 22 Sep 2003
option de tri dans une requête mysql
bonjour,
j'ai un champ date dans une table qui est parfois vide, je voudrais trier les résultats par date (order by date) mais en affichant les résultats vides à la fin.
exemple avec les champs dates enregistrés dans la table :
1) 0
2) 2006-07-01
3) 2006-06-01
m'affiche
> 2006-06-01
> 2006-07-01
> 0
merci -)
Mikaël
j'ai un champ date dans une table qui est parfois vide, je voudrais trier les résultats par date (order by date) mais en affichant les résultats vides à la fin.
exemple avec les champs dates enregistrés dans la table :
1) 0
2) 2006-07-01
3) 2006-06-01
m'affiche
> 2006-06-01
> 2006-07-01
> 0
merci -)
Mikaël
-

e-kiwi - Modérateur

- Messages: 15617
- Inscription: 23 Déc 2003
dans le pire des cas, tu peux faire la requete deux fois, une fois les non vide triés, et une seocnde fois les vide
sinon tu peux faire la requete une fois, les recuperer dans un tableau, trier le tableau et l'afficher
si ca se fait en sql, je ne sais po le faire
si ca se fait en sql, je ne sais po le faire
- retza
- WRInaute discret

- Messages: 58
- Inscription: 16 Fév 2005
Est-ce qu'il y a une réelle nécessité de récuperer les dates vides ??? Parce qu'un simple "WHERE date <>'0' ORDER BY Date" devrait suffir dans ce cas.
Sinon, essaye ça
SELECT * FROM Table1 WHERE Date <> '0' ORDER BY Date
UNION
SELECT * FROM Table1 WHERE Date= '0'
(A corriger par les spécialistes si je me suis raté dans l'écriture )
Sinon, essaye ça
SELECT * FROM Table1 WHERE Date <> '0' ORDER BY Date
UNION
SELECT * FROM Table1 WHERE Date= '0'
(A corriger par les spécialistes si je me suis raté dans l'écriture )
- atomikado
- WRInaute discret

- Messages: 160
- Inscription: 22 Sep 2003
non, si je fais order by date ASC, ca m'affiche les champs vides au départ... or je les veux a la fin
et si je fais un date DESC ca m'affiche bien les champs vides a la fin, mais les champs non-vides sont triés dans le sens inverse
je pense qu'il faut faire un truc du genre :
order by date (if date!='')
mais je ne connais pas la syntaxe...
et si je fais un date DESC ca m'affiche bien les champs vides a la fin, mais les champs non-vides sont triés dans le sens inverse
je pense qu'il faut faire un truc du genre :
order by date (if date!='')
mais je ne connais pas la syntaxe...
- retza
- WRInaute discret

- Messages: 58
- Inscription: 16 Fév 2005
e-kiwi, a priori oui, puisque les requête sont lancées l'une aprés l'autre, la "vue" générée se remplie au fur et à mesure par les enregistrements correspondants...
Mais là aussi, faut voir en fonction du moteur de Bdd utilisé... je garantie pas qu'Access, SQL server ou MySQL donnent des résultats similaires
Mais là aussi, faut voir en fonction du moteur de Bdd utilisé... je garantie pas qu'Access, SQL server ou MySQL donnent des résultats similaires
-

e-kiwi - Modérateur

- Messages: 15617
- Inscription: 23 Déc 2003
retza a écrit:e-kiwi, a priori oui, puisque les requête sont lancées l'une aprés l'autre, la "vue" générée se remplie au fur et à mesure par les enregistrements correspondants...
Mais là aussi, faut voir en fonction du moteur de Bdd utilisé... je garantie pas qu'Access, SQL server ou MySQL donnent des résultats similaires
t es sur ?
http://cerig.efpg.inpg.fr/tutoriel/base ... chap21.htm
-

Xou - WRInaute discret

- Messages: 187
- Inscription: 2 Juin 2006
Le problème que j'ai toujours rencontré avec UNION est le respect du tri (ASC & DESC) c'est pour celà que je préfère faire deux requettes disctinctes et non en UNION.
Ne donnera pas le resultat souhaité. (le tri de la premiere requette ne sera pas conservé)
Alors que:
puis:
donnera le resultat souhaité.
Je ne sais pour quelle raison mais je n'ai jamais solutionné ce problème.
- Code: Tout sélectionner
(SELECT * FROM table1 WHERE date <> 0 ORDER BY date)
UNION
(SELECT * FROM table1 WHERE date = 0)
Ne donnera pas le resultat souhaité. (le tri de la premiere requette ne sera pas conservé)
Alors que:
- Code: Tout sélectionner
SELECT * FROM table1 WHERE date <> 0 ORDER BY date
puis:
- Code: Tout sélectionner
SELECT * FROM table1 WHERE Date = 0
donnera le resultat souhaité.
Je ne sais pour quelle raison mais je n'ai jamais solutionné ce problème.
Dernière édition par Xou le Mar Juil 18, 2006 10:43, édité 2 fois.
26 messages
• Page 1 sur 2 • 1, 2
Lectures recommandées sur ce thème :
- Requête mysql : Tri complexe des commentaires par votes
- Tri d'une requête
- Requête SQL : tri particulier
- tri (mysql ou php)
- [MYSQL] Tri par date
- Optimisation d'un tri Mysql
- Requete SQL : double tri un peu complexe
- Tri sur champ Date Mysql
- [PHP/MySQL] Problème dans le tri
- Mysql 5 : Tri sur nombres négatifs
Consultez la description détaillée des produits ou services de Google suivants : Google Alternate Views
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


