Page 1 sur 3
order by et valeurs nulles
Posté : 17 nov. 2007, 15:37
par pierre
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
Posté : 17 nov. 2007, 15:40
par Kaoteknik
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";
Posté : 17 nov. 2007, 15:45
par pierre
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
Posté : 17 nov. 2007, 16:04
par Kaoteknik
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.
Posté : 17 nov. 2007, 16:13
par pierre
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
Posté : 17 nov. 2007, 16:17
par Kaoteknik
Et en ajoutant ASC à la fin de la requête ?
Posté : 17 nov. 2007, 16:22
par pierre
non pareil
Posté : 17 nov. 2007, 16:24
par Kaoteknik
Je vais tester quelques petites choses de mon côté. Si j'ai une solution je reviendrai la poster !

Posté : 17 nov. 2007, 16:25
par pierre
ok merci
Posté : 17 nov. 2007, 16:28
par Sékiltoyai
Code : Tout sélectionner
SELECT id_nom FROM tbl_untruc ORDER BY (id_nom IS NULL) ASC, id_nom ASC
Posté : 17 nov. 2007, 16:38
par pierre
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
Posté : 17 nov. 2007, 16:38
par Truc
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
Posté : 17 nov. 2007, 16:45
par pierre
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`)
);
Posté : 17 nov. 2007, 16:46
par Sékiltoyai
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"
Posté : 17 nov. 2007, 16:49
par pierre
pardon ça marche, mais ne me donne pas le résultat voulu