|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : avril 2003 Messages : 117 ![]() |
bonjour,
dans une de mes requête, je fais un 'order by' des plus classiques sur une de mes colonnes et il m'affiche les champs nuls en premiers; je voudrais que l'inverse se produise: les champs avec des valeurs en premier (et trié de manière croissante) et ensuite les champs vides et nuls. j'ai vu une question oracle avec la question inverse avec une fonction NVL apparemment mais cette fonction n'a pas l'air de fonctionner sous PG merci d'avance pour vos réponses |
|
|
00
|
|
|
#2 |
|
Membre habitué
![]() Inscription : mai 2003 Messages : 145 ![]() |
essaye DESC
|
|
|
00
|
|
|
#3 |
|
Membre à l'essai
![]() |
utilise cette fonction postgresql:
COALESCE(ton_champ,'0') cette fonction remplace ton_champ par 0 quand il est NULL, ce qui permet de solutionner ton problème d'ORDER BY...j'ai eu le problème la semaine dernière alors apres une semaine de test, ca roule... |
|
|
00
|
|
|
#4 |
|
Membre du Club
![]() Inscription : avril 2003 Messages : 117 ![]() |
ben DESC va me les classer par ordre décroissant, moi je veux envoyer les résultats avec mon champ qui est NULL à la fin avec mes résultats avec des valeurs non nulles classés par ordre croissant
|
|
|
00
|
|
|
#5 | |||||
|
Membre du Club
![]() Inscription : avril 2003 Messages : 117 ![]() |
Citation:
voila ce que j'ai essayé Code :
Code :
les résultats mettent les champs à 0 en premier et après c classé de manière croissante |
|||||
|
|
00
|
|
|
#6 |
|
Membre à l'essai
![]() |
La seul solution que j'ai trouvé était la fonction que je t'ai donnée et elle fonctionne trés bien. Si tu veux absolument récupérer ton champ null au final, tu as deux possibilité, la première (et celle que me semble le mieux) est que tu fait dans ta requete deux selection sur le champs a probleme, tu fait l'order by sur le champ avec le COALESCE et tu aura en face de cette colonne ton autre colonne avec tes valeurs NULL...(j'espère que ca correspond bien a ton problème).
Si le problème ne concerne que l'affichage, tu peu faire le COALESCE et tu fais seulement un retraitement avec PHP ou ASP ou autre ou tu remplace 0 par NULL... |
|
|
00
|
|
|
#7 | ||
|
Membre à l'essai
![]() |
essaye ca
Code :
|
||
|
|
00
|
|
|
#8 | ||
|
Membre du Club
![]() Inscription : avril 2003 Messages : 117 ![]() |
ça ne fonctionne pas...
je me rends compte que tu cherches des solutions mais que ça convient pas, je dois mettre mal exprimé c sûr!! j'ai une table avec (entre autres) mat_champ1 de type integer. quand je fais des enregsitrements dans la table, si mat_champ1 n'est pas renseigné, Postgres le met à 0. Perso dans mon script je fais un insert avec mat_champ1=NULL donc dans tous mes enregsitrements (une cenatine quand même lors de l'affichage de la table en utilisant un order by normal j'ai ceci Citation:
Citation:
si la solution marche aussi pour des champs avec des chaines (dans ce cas, mes champs sont vides quansd il y a rien dedans), ça serait un plus non négligeable encore merci |
||
|
|
00
|
|
|
#9 |
|
Membre à l'essai
![]() |
oui en effet j'etais un peu a coté de la plaque... (
Bon maintenant qu'o se comprend j'ai quelques question supplémentaire parceque là franchement je vois pas de solution simple et propre a ton problème. Est-ce que ton champs a une valeur Maximale ? (si oui on pourrai faire une selection sur la colonne en remplacant les 0 par une valeur qui sera de toute facon la plus grande, puis trier sur cette colonne, les vrai valeur se trouvant dans une colonne non-modifié. Mais bon c'est un peu sale comme methode) Est-ce que tu veux absolument faire ton trie dans la requete ou tu peux le faire ensuite du style en PHP, ASP ou autre ? Voilou... |
|
|
00
|
|
|
#10 | ||
|
Membre à l'essai
![]() |
a yé je pense avoir touvé un truc qui marche:
Code :
Tiens moi au courant. |
||
|
|
00
|
|
|
#11 | |||
|
Membre du Club
![]() Inscription : avril 2003 Messages : 117 ![]() |
impeccable ta dernière solution est la bonne
Code :
PS: c quand même une synthaxe bizaroide!! parce qu'avec DESC, j'aurais du les avoir décroissant et le ' > 0' n'aurait pas dû me donner les valeurs à 0 enfin bon ça marche et c le principal, encore merci PS2: Citation:
|
|||
|
|
00
|
|
|
#12 |
|
Membre à l'essai
![]() |
pour la syntaxe, le >0 signifie que pour tout ce qui est superieur a 0 dans ce champ, le trie qui s'applique est le DESC.
Forcément, les autres champs (égale a zéro) sont rajoutés à la fin du résultat et non pas supprimé (le order by ne fonctionne pas comme un Where). Bon voilà pour la ptite explication. @+ |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com