質問
ユーザーにオプションのリストを表示する PHP アプリケーションがあります。このリストは、SQL 2000 に対する単純なクエリから生成されます。私がやりたいのは、特定のオプションをリストの先頭に置き、残りのオプションをアルファベット順に並べ替えることです。
たとえば、アルファベット順に並べ替えた場合のオプションは次のとおりです。
Calgary
Edmonton
Halifax
Montreal
Toronto
私が望むリストは次のようになります。
**Montreal**
Calgary
Edmonton
Halifax
Toronto
単一のクエリを使用してこれを行う方法はありますか?それとも、クエリを 2 回実行して結果を追加することになっているのでしょうか?
解決
SELECT name
FROM locations
ORDER BY
CASE
WHEN name = 'Montreal'
THEN 0
ELSE 1
END, name
他のヒント
SELECT name FROM options ORDER BY name = "Montreal", name;
注記:これは、OP が要求したような SQL 2000 ではなく、MySQL で動作します。
create table Places (
add Name varchar(30),
add Priority bit
)
select Name
from Places
order by Priority desc,
Name
私が構築した症例レポートが満載の Web サイトでも同様の問題がありました。被害者の名前がわかっている事件報告は、より説得力があるため、一番上に並べてほしかった。逆に、ジョン・ドゥの事件はすべて一番下に置きたかったのです。これには人の名前も関係するため、姓名ソートの問題も発生しました。まったく人ではないケースもあるため、2 つの名前フィールドに分割したくありませんでした。
私の解決策:
「名前」フィールドが表示されています。すべてのクエリで使用されますが、決して表示されない「NameSorted」フィールドもあります。私の入力 UI は、並べ替えフィールドに入力された「LAST、FIRST」を表示バージョンに自動的に変換します。
最後に、並べ替えを「調整」するために、並べ替えフィールドの先頭に適切な文字を入力するだけです。最後に出したいので先頭に「zzz」を付けています。上部に並べ替えるには、「!」を置くことができます。最初に。繰り返しますが、編集 UI がこれを処理します。
はい、少し安っぽいことは認めますが、機能します。私にとっての利点の 1 つは、ページと RSS などを生成するために、さまざまな場所で結合を含むより複雑なクエリを実行する必要があることです。また、正しく並べ替えるために複雑な式を覚え続ける必要がなく、常に "NameSorted" によって並べ替えるだけで済みます。 " 分野。
私のプロフィールをクリックすると、結果として表示される Web サイトが表示されます。