ホームページ > データベース > mysql チュートリアル > PostgreSQL で MySQL の ORDER BY FIELD() をシミュレートするにはどうすればよいですか?

PostgreSQL で MySQL の ORDER BY FIELD() をシミュレートするにはどうすればよいですか?

DDD
リリース: 2024-12-31 08:04:10
オリジナル
317 人が閲覧しました

How to Simulate MySQL's ORDER BY FIELD() in PostgreSQL?

PostgreSQL での MySQL の ORDER BY FIELD() のシミュレーション

MySQL ユーザーが PostgreSQL に移行すると、ORDER BY の制限に遭遇する可能性があります。 FIELD() 構文は、後者のデータベースではサポートされていません。これにより、PostgreSQL でその動作をエミュレートする方法が疑問になります。

問題:

MySQL では、ORDER BY FIELD() 句を使用してカスタム順序を定義できます。値と一連の期待値を受け取り、クエリ結果は指定された値の順序で並べ替えられます。

例:

SELECT * FROM `currency_codes` ORDER BY FIELD(code, 'GBP', 'EUR', 'BBD', 'AUD', 'CAD', 'USD') DESC, name ASC
ログイン後にコピー

このクエリは、 「GBP」、「EUR」、「BBD」、「AUD」、「CAD」、「USD」をこの順序でコード化し、結果をさらに昇順に並べ替えます。 'name' 列。

解決策:

PostgreSQL では、CASE ステートメントの組み合わせと、結果の数値による順序付けを使用して、同様の機能を実現できます。

ORDER BY FIELD() の動作をシミュレートする方法は次のとおりです。句:

SELECT * FROM `currency_codes`
ORDER BY
CASE
    WHEN code='USD' THEN 1
    WHEN code='CAD' THEN 2
    WHEN code='AUD' THEN 3
    WHEN code='BBD' THEN 4
    WHEN code='EUR' THEN 5
    WHEN code='GBP' THEN 6
    ELSE 7
END,name;
ログイン後にコピー

このクエリ内:

  • CASE ステートメントは、'code' 列の指定された各値に数値 (1 ~ 6) を割り当てます。
  • 指定された値を含む行は、割り当てられた値の番号順に並べ替えられます。
  • 「コード」列の場合value は指定された値のいずれにも一致しないため、デフォルト値の 7 を受け取ります。
  • 結果はさらに、'name' 列によって昇順に並べ替えられます。

この手法事前定義された順序に基づいて行に優先順位を付けることができ、MySQL ORDER BY FIELD() 句の機能にほぼ近いものを提供します。

以上がPostgreSQL で MySQL の ORDER BY FIELD() をシミュレートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート