order by et valeurs nulles

Eléphanteau du PHP | 32 Messages

17 nov. 2007, 15:37

bonjour,

à nouveau une petite question sur une requête
$req_untruc=mysql_query("select id_nom from tbl_untruc order by id_nom",$db_link);
pas de soucis jusque là, cela retourne bien une liste de noms ordonnés alphabétiquements
Albert
Durand
Dupont
Marcel
Martin
l'ennui, c'est que lorsque des champs ne sont pas renseignés dans la base (donc vide), ils apparaissent en premier et non comme je voudrai à la fin puisque vide

Si j'ai bien lu la doc MySQL c'est normal... Mais je ne trouve nulle part le moyen de contourner cela, à savoir donc faire passer les champs vide en fin de résultat

Merci d'avance de votre aide

Eléphant du PHP | 185 Messages

17 nov. 2007, 15:40

Pourquoi ne pas simplement ignorer les champs vides ? Tu peux le faire avec la clause IS NOT NULL je crois...
$requete = "SELECT id FROM ma_table WHERE nom IS NOT NULL ORDER BY nom";

Eléphanteau du PHP | 32 Messages

17 nov. 2007, 15:45

oui je sais mais je veux quand même qu'ils apparaissent en fin car d'autres infos sont recherchées aussi et doivent apparaître

Eléphant du PHP | 185 Messages

17 nov. 2007, 16:04

Hum... Je ne sais pas si ça peut fonctionner, mais peut-être qu'en indiquant que l'ordre doit être effectué à partir des champs non-vides... A tester :
$requete = "SELECT id_nom FROM tbl_untruc ORDER BY id_nom IS NOT NULL";
Sinon je vois bien une autre solution qui, même si elle manque d'élégance, devrait marcher : en faisant deux requêtes, la première en prenant uniquement les champs remplis, puis une seconde ne contenant que les champs vides. Donc utiliser IS NOT NULL dans un premier temps dans une clause WHERE, puis IS NULL.

Eléphanteau du PHP | 32 Messages

17 nov. 2007, 16:13

la première ne marche pas

elle renvoie bien les NULL à la fin mais cela perd l'ordre alphabétique

la seconde m'embête car rajoute une requête

Eléphant du PHP | 185 Messages

17 nov. 2007, 16:17

Et en ajoutant ASC à la fin de la requête ?

Eléphanteau du PHP | 32 Messages

17 nov. 2007, 16:22

non pareil

Eléphant du PHP | 185 Messages

17 nov. 2007, 16:24

Je vais tester quelques petites choses de mon côté. Si j'ai une solution je reviendrai la poster ! :)

Eléphanteau du PHP | 32 Messages

17 nov. 2007, 16:25

ok merci

ViPHP
ViPHP | 5924 Messages

17 nov. 2007, 16:28

Code : Tout sélectionner

SELECT id_nom FROM tbl_untruc ORDER BY (id_nom IS NULL) ASC, id_nom ASC

Eléphanteau du PHP | 32 Messages

17 nov. 2007, 16:38

SELECT id_nom FROM tbl_untruc ORDER BY (id_nom IS NULL) ASC, id_nom ASC
marche pas exactement non plus

si je mets
SELECT id_nom FROM tbl_untruc ORDER BY (id_nom IS NULL) ASC, id_nom DESC
ça marche, mais le id_nom est alors classé dans l'ordre inverse

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

17 nov. 2007, 16:38

Modération :
pierre, afin d'obtenir une réponse sur ce forum, il est indispensable de :

- Préciser quel est le SGBD utilisé ainsi que sa Version
- Poster la Structure des Tables utilisées dans la requête sous la forme d'un "CREATE TABLE ..." :!:
(Vous pouvez exporter la structure d'une table via phpMyAdmin. Retirez les colonnes inutiles)
- Indiquer le message d'erreur SQL le cas échéant.

Si nécessaire un échantillon des données.
Autant prendre les bonnes habitudes tout de suite :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 32 Messages

17 nov. 2007, 16:45

ok pardon

MySQL - 5.0.20a-standard pour la base

CREATE TABLE `tbl_newsletter` (
`incr_id` int(11) unsigned NOT NULL auto_increment,
`id_civilite` varchar(8) default NULL,
`id_nom` varchar(100) default NULL,
`id_prenoml` varchar(80) default NULL,
`id_mail` varchar(255) default NULL,
`id_societe` varchar(255) default NULL,
`id_date` datetime NOT NULL,
`id_delete` tinyint(1) unsigned NOT NULL default '0',
PRIMARY KEY (`incr_id`)
);

ViPHP
ViPHP | 5924 Messages

17 nov. 2007, 16:46

SELECT id_nom FROM tbl_untruc ORDER BY (id_nom IS NULL) ASC, id_nom ASC
marche pas exactement non plus
ca ne veut rien dire "ca ne marche pas"

Eléphanteau du PHP | 32 Messages

17 nov. 2007, 16:49

pardon ça marche, mais ne me donne pas le résultat voulu