2010-04-05 4 views
2

J'ai une colonne appelée "menu_order" qui n'a pas de valeur par défaut. Quand je sélectionne le contenu cette colonne à l'aide de l'instruction select suivante:Comment sortir des articles dans l'ordre dans MySQL?

SELECT * FROM categories ORDER BY menu_order ASC 

Il énumère les articles de catégories qui ont rien que leur ordre de menu d'abord, puis celui de qui ont 1 et de 2 de et 3 pour. Existe-t-il un moyen d'empêcher SQL de ne rien prendre devant les numéros lorsque j'essaie de lister les choses dans l'ordre?

Ainsi, par exemple, si j'ai:

cat_name | menu_order 
---------------------- 
Lunch | 1 
Dinner | 

Et je joue ma requête, la sortie doit être:

Lunch Dinner 

Non:

Dinner Lunch 

Répondre

1

Vous pouvez utiliser la fonction IFNULL dans l'ordre par un grand nombre

ORDER BY IFNULL(menu_order, 1000) ASC 

Vous pouvez même essayer d'utiliser un case statement

ORDER BY 
CASE 
    WHEN menu_order IS NULL THEN 1 
    ELSE 0 
END ASC, 
menu_order ASC 
7

Cela mettra la valeurs nulles en dernier:

SELECT * 
FROM categories 
ORDER BY menu_order IS NULL ASC, menu_order ASC 
+0

Je dois avoir fait une erreur en essayant d'expliquer mon problème, tout le code donné ici fait toujours apparaître les valeurs nulles en premier, je veux que celles-ci apparaissent à la fin APRES celles auxquelles on a assigné des valeurs numériques. Donc même la valeur assignée est 1000000 - je veux qu'elle vienne avant celle qui a une valeur nulle. – RailsRor

+0

RailsRor: Désolé, la solution est d'utiliser ASC au lieu de DESC. J'ai édité ma réponse. –

+0

La réponse acceptée est correcte mais je trouve celle-ci plus claire. Je ne comprends pas pourquoi certains utilisateurs se dépêchent d'accepter des réponses avant que la communauté ait le temps de fournir des réponses utiles. –

1
ORDER BY IFNULL(menu_order, 99999999) ASC 
+1

Yay. Plus de downvotes pour une réponse correcte. –

Questions connexes