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

MySQL の ORDER BY FIELD() 関数を PostgreSQL でレプリケートするにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-07 10:02:12
オリジナル
603 人が閲覧しました

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

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

MySQL から PostgreSQL に移行する場合、開発者は PostgreSQL に ORDER BY FIELD() 関数がないことに遭遇する可能性があります。この関数は、指定された値のリストに基づいてレコードを並べ替える便利な方法を提供します。

問題ステートメント:

Rails アプリケーションは、次の順序付け句を含む SQL を利用します。

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

この句は、指定された通貨コードのリストに基づいてレコードを並べ替え、名前フィールドによる追加の順序付けを目的としています。ただし、PostgreSQL はこの構文をサポートしていません。

解決策:

PostgreSQL で MySQL の ORDER BY FIELD() の動作をシミュレートするには、次の構文を組み合わせて使用​​できます。 CASE ステートメントと ORDER BY 句。方法は次のとおりです:

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 ステートメントはコード フィールドを評価し、MySQL の FIELD() 関数にリストされている各通貨コードに対応する優先度を割り当てます。 .
  • ORDER BY 句は、この優先順位を使用して最初にレコードを並べ替え、次に名前に基づいて並べ替えます。

このメソッドは、PostgreSQL で MySQL の ORDER BY FIELD() の動作をシミュレートする便利な方法を提供し、レコードが希望どおりにソートされることを保証します。

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

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