Simulation de ORDER BY FIELD() de MySQL dans PostgreSQL
En tant qu'utilisateur MySQL passant à PostgreSQL, vous pouvez rencontrer la limitation que ORDER BY La syntaxe FIELD() n'est pas prise en charge dans cette dernière base de données. Cela soulève la question de savoir comment émuler son comportement dans PostgreSQL.
Problème :
MySQL vous permet de définir un ordre personnalisé à l'aide de la clause ORDER BY FIELD(). Elle prend une valeur et une série de valeurs attendues, et les résultats de la requête sont triés dans l'ordre des valeurs fournies.
Par exemple :
SELECT * FROM `currency_codes` ORDER BY FIELD(code, 'GBP', 'EUR', 'BBD', 'AUD', 'CAD', 'USD') DESC, name ASC
Cette requête donnerait la priorité aux lignes avec le code « GBP », « EUR », « BBD », « AUD », « CAD » et « USD » dans cet ordre, tout en triant davantage les résultats par ordre croissant selon le Colonne 'nom'.
Solution :
Dans PostgreSQL, vous pouvez obtenir des fonctionnalités similaires en utilisant une combinaison d'instructions CASE et en triant selon les valeurs numériques résultantes.
Voici comment simuler le comportement de la clause 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;
Dans cette requête :
Cette technique vous permet de hiérarchiser les lignes en fonction d'un ordre prédéfini, fournissant une approximation proche de la fonctionnalité de la clause MySQL ORDER BY FIELD().
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!