Frage

Ich habe eine PHP-Anwendung, die eine Liste von Optionen für einen Benutzer anzeigt. Die Liste wird erzeugt von einer einfachen Abfrage für SQL 2000. Was ich eine bestimmte Option tun möchte ist haben an der Spitze der Liste, und dann die verbleibenden Optionen alphabetisch sortiert haben.

Zum Beispiel ist hier die Optionen, wenn alphabetisch sortiert:

Calgary  
Edmonton  
Halifax  
Montreal  
Toronto  

Was würde ich die Liste möchte, ist mehr wie folgt aus:

**Montreal**  
Calgary  
Edmonton  
Halifax  
Toronto  

Gibt es eine Möglichkeit, dass ich dies mit einer einzigen Abfrage zu tun? Oder bin ich stecken läuft die Abfrage zweimal und die Ergebnisse anhängt?

War es hilfreich?

Lösung

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

Andere Tipps

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

. Hinweis: Das funktioniert mit MySQL, nicht SQL 2000, wie die OP angefordert

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

select   Name
from     Places
order by Priority desc,
         Name

Ich hatte ein ähnliches Problem auf einer Website, die ich voller Fallberichte gebaut. Ich wollte die Fallberichte in denen das Opfer Namen der Spitze zu sortieren ist bekannt, weil sie überzeugend sind. Andererseits wollte ich die alle Fälle John Doe am Boden sein. Da dies auch Die Namen der beteiligten, hatte ich das Vorname / Nachname Sortierung Problem auch. Ich wollte es nicht in zwei Namensfelder aufgeteilt, weil einige Fälle sind nicht Menschen überhaupt.

Meine Lösung:

Ich habe ein Feld „Namen“, das ist das, was angezeigt wird. Ich habe auch ein „NameSorted“ Feld, das in allen Abfragen verwendet wird, aber wird nie angezeigt. Mein Eingang UI Pflege der Umwandlung nimmt „LAS, FIRST“ eingegeben in das Sortierfeld in die Display-Version automatisch.

Schließlich ist die Sortierung „rig“ Ich habe einfach entsprechende Zeichen zu Beginn des Sortierfeldes setzen. Da ich Sachen will am Ende kommen, habe ich „zzz“ am Anfang. Um an der Spitze zu sortieren könnten Sie setzen „!“ am Anfang. Auch hier Ihre Bearbeitung UI für Sie darum kümmern.

Ja, ich gebe es ein wenig kitschig, aber es funktioniert. Ein Vorteil für mich ist, ich habe komplexere Abfragen zu tun mit an verschiedenen Orten verbindet Seiten im Vergleich RSS usw. zu erzeugen, und ich muss nicht halten einen komplexen Ausdruck Erinnerung an die Sortierung richtig zu machen, es ist immer einfach irgendwie durch die „NameSorted "ein.

Klicken Sie auf mein Profil der resultierenden Webseite zu sehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top