Question

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

Par exemple, voici les options si elles sont triées par ordre alphabétique:

Calgary  
Edmonton  
Halifax  
Montreal  
Toronto  

Ce que j'aimerais que la liste soit est plutôt comme ceci:

**Montreal**  
Calgary  
Edmonton  
Halifax  
Toronto  

Existe-t-il un moyen de le faire en utilisant une seule requête? Ou suis-je obligé d'exécuter la requête deux fois et d'ajouter les résultats?

Était-ce utile?

La solution

SELECT name
FROM locations
ORDER BY
    CASE
        WHEN name = 'Montreal' 
        THEN 0
        ELSE 1
    END, name

Autres conseils

SELECT name FROM options ORDER BY name = "Montreal", name;

Note: Ceci fonctionne avec MySQL, pas avec SQL 2000 comme l'OP demandé.

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

select   Name
from     Places
order by Priority desc,
         Name

J'ai eu un problème similaire sur un site Web que j'ai construit, rempli de rapports de cas. Je voulais les rapports de cas où le nom de la victime est connu pour être classés au top, car ils sont plus convaincants. Inversement, je voulais que tous les cas John Doe soient au bas de la liste. Etant donné que cela impliquait également les noms des personnes, j'avais également un problème de tri prénom / nom. Je ne voulais pas le scinder en deux champs car certains cas ne sont pas du tout des gens.

Ma solution:

J'ai un " Nom " champ qui est ce qui est affiché. J'ai également un " NameSorted " champ utilisé dans toutes les requêtes mais jamais affiché. Mon interface utilisateur de saisie prend en charge la conversion de "LAST, FIRST". automatiquement entré dans le champ de tri dans la version d'affichage.

Enfin, sur "rig". le tri, je mets simplement les caractères appropriés au début du champ de tri. Etant donné que je veux des trucs à la fin, j'ai mis "zzz". au début. Pour trier en haut, vous pouvez mettre "! & Quot; au début. Là encore, votre interface d’édition peut s’occuper de cela pour vous.

Oui, j'avoue que c'est un peu moche, 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 contre RSS, etc. NameSorted " champ.

Cliquez sur mon profil pour voir le site Web résultant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top