私はいくつかの結果(私の場合は単一の結果)を一番上に置き、残りを並べ替えるクエリを作成しようとしています。私はまだPostgreSQLのソリューションを見つけていません。PostgreSQLでORDER BYの後ろに完全一致を行う方法
私はairports
と呼ばれるテーブルがあります。要するに
id | code | display_name
----+------+----------------------------
1 | SDF | International
2 | INT | International Airport
3 | TES | Test
4 | APP | Airport Place International
、私は非同期的に呼び出されるコントローラメソッドでクエリを持っている場合のいずれかcode
またはdisplay_name
によって空港のためのユーザーのテキストを検索します。しかし、code
と一致する入力をユーザーが入力すると(空港コードは一意)、その結果が最初に表示され、のint
を持つすべての空港を昇順で表示します。完全一致がない場合は、昇順でソートされたワイルドカードを返します。display_name
INT
で、ユーザはタイプのであれば、行(2, INT, International Airport)
は、他の人が続い最初に返されるべきである:
Results:
1. INT | International Airport
2. APP | Airport Place International
3. SDF | International
ここで私はそれをいじったクエリの種類は、私のアプリケーションのコンテキスト外の意味を作るために、わずかに単純化されていますが、それにもかかわらず、同じコンセプト。
私はINT
を入力すると今の結果は、私は私の
ORDER BY
が不正確である必要がありますが、私はそれが 任意の助けをいただければ幸い取得する:)
見えることはできません
Results:
1. APP | Airport Place International
2. INT | International Airport
3. SDF | International
を取得しています
SELECT * FROM airports
WHERE display_name LIKE 'somesearchtext%'
ORDER BY (CASE WHEN a.code = 'somesearchtext` THEN a.code ELSE a.display_name END)
注意。 "="は論理値を返し、TRUEはFALSEの後にソートするので、 "ORDER BY a.code = 'yourvalue' DESC、a.display_name" – peufeu