Beim Übergang von MySQL zu PostgreSQL stoßen Entwickler möglicherweise auf das Fehlen der ORDER BY FIELD()-Funktion in PostgreSQL. Diese Funktion bietet eine bequeme Möglichkeit, Datensätze basierend auf einer angegebenen Werteliste zu sortieren.
Problemstellung:
Eine Rails-Anwendung verwendet SQL, das die folgende Sortierklausel enthält:
SELECT * FROM `currency_codes` ORDER BY FIELD(code, 'GBP', 'EUR', 'BBD', 'AUD', 'CAD', 'USD') DESC, name ASC
Diese Klausel zielt darauf ab, die Datensätze basierend auf der angegebenen Liste von Währungscodes zu sortieren, mit zusätzlicher Sortierung nach dem Namensfeld. PostgreSQL unterstützt diese Syntax jedoch nicht.
Lösung:
Um das Verhalten von MySQLs ORDER BY FIELD() in PostgreSQL zu simulieren, können Sie eine Kombination davon verwenden CASE-Anweisung und die ORDER BY-Klausel. So geht's:
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;
Bei diesem Ansatz:
Diese Methode bietet eine praktische Möglichkeit, das Verhalten von MySQLs ORDER BY FIELD() in PostgreSQL zu simulieren und stellt sicher, dass Datensätze wie gewünscht sortiert werden.
Das obige ist der detaillierte Inhalt vonWie repliziere ich die ORDER BY FIELD()-Funktion von MySQL in PostgreSQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!