Maison >base de données >tutoriel mysql >Comment répliquer la fonction ORDER BY FIELD() de MySQL dans PostgreSQL ?

Comment répliquer la fonction ORDER BY FIELD() de MySQL dans PostgreSQL ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-07 10:02:12601parcourir

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

Simulation de ORDER BY FIELD() de MySQL dans Postgresql

Lors de la transition de MySQL vers PostgreSQL, les développeurs peuvent rencontrer l'absence de la fonction ORDER BY FIELD() dans PostgreSQL. Cette fonction fournit un moyen pratique de trier les enregistrements en fonction d'une liste de valeurs spécifiée.

Énoncé du problème :

Une application Rails utilise SQL qui inclut la clause de commande suivante :

SELECT * FROM `currency_codes` ORDER BY FIELD(code, 'GBP', 'EUR', 'BBD', 'AUD', 'CAD', 'USD') DESC, name ASC

Cette clause vise à trier les enregistrements en fonction de la liste spécifiée de codes de devise, avec un classement supplémentaire par champ de nom. Cependant, PostgreSQL ne prend pas en charge cette syntaxe.

Solution :

Pour simuler le comportement de ORDER BY FIELD() de MySQL dans PostgreSQL, vous pouvez utiliser une combinaison des Instruction CASE et clause ORDER BY. Voici comment :

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;

Dans cette approche :

  • L'instruction CASE évalue le champ de code et attribue une priorité correspondante à chaque code de devise répertorié dans la fonction FIELD() dans MySQL .
  • La clause ORDER BY utilise cette priorité pour trier les enregistrements en premier, suivie du tri basé sur le nom field.

Cette méthode fournit un moyen pratique de simuler le comportement de ORDER BY FIELD() de MySQL dans PostgreSQL et garantit que les enregistrements sont triés comme souhaité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn