2008-09-17 10 views
4

J'ai une application PHP qui affiche une liste d'options à un utilisateur. La liste est générée à partir d'une simple requête sur SQL 2000. Ce que je voudrais faire est d'avoir une option spécifique en haut de la liste, puis de trier les options restantes par ordre alphabétique.Trier par une option forcée en haut de la liste

Par exemple, voici les options si classées par ordre alphabétique:

Calgary 
Edmonton 
Halifax 
Montreal 
Toronto 

Ce que je voudrais que la liste soit est plus comme ceci:

**Montreal** 
Calgary 
Edmonton 
Halifax 
Toronto 

Est-il possible que je peux le faire en utilisant une seule requête? Ou suis-je coincé en cours d'exécution de la requête à deux reprises et en ajoutant les résultats?

Répondre

5
SELECT name 
FROM locations 
ORDER BY 
    CASE 
     WHEN name = 'Montreal' 
     THEN 0 
     ELSE 1 
    END, name 
4
SELECT name FROM options ORDER BY name = "Montreal", name; 

Remarque: Cela fonctionne avec MySQL, pas SQL 2000 comme l'OP demandé.

+0

J'ai essayé votre solution mais elle a jeté une erreur de syntaxe SQL sur le signe = dans la commande. Merci pour l'idée cependant. –

+0

Ah oui, je devais penser à la syntaxe MySQL: D – mercutio

0
create table Places (
    add Name varchar(30), 
    add Priority bit 
) 

select Name 
from  Places 
order by Priority desc, 
     Name 
0

J'ai eu un problème similaire sur un site Web, j'ai construit plein de rapports de cas. Je voulais les rapports de cas où le nom de la victime est connu pour trier vers le haut, parce qu'ils sont plus convaincants. Inversement, je voulais que tous les cas de John Doe soient en bas. Comme cela impliquait aussi les noms des gens, j'ai aussi eu le problème du tri des prénoms et des noms de famille. Je ne voulais pas le diviser en deux champs de noms parce que certains cas ne sont pas du tout des personnes.

Ma solution:

J'ai un champ « Nom » qui est ce qui est affiché. J'ai également un champ "NameSorted" qui est utilisé dans toutes les requêtes mais n'est jamais affiché. Mon interface d'entrée prend soin de convertir "LAST, FIRST" entré dans le champ de tri dans la version d'affichage automatiquement.

Enfin, pour "truquer" le tri, je mets simplement les caractères appropriés au début du champ de tri. Puisque je veux que les choses sortent à la fin, j'ai mis "zzz" au début. Pour trier en haut vous pouvez mettre "!" au début. Encore une fois, votre interface d'édition peut prendre soin de cela pour vous. Oui, j'avoue que c'est un peu ringard, mais ça marche. Un avantage pour moi est que je dois faire des requêtes plus complexes avec des jointures à différents endroits pour générer des pages par rapport à RSS, et je n'ai pas besoin de garder en mémoire une expression complexe pour la trier correctement. " champ.

Cliquez sur mon profil pour voir le site Web qui en résulte.