MySQL FIELD() in Postgresql simulieren
Die Konvertierung von MySQL zu PostgreSQL kann unvorhergesehene Herausforderungen mit sich bringen. Ein solches Problem ist die Simulation der ORDER BY FIELD()-Funktionalität, die in Postgresql nicht direkt unterstützt wird.
In MySQL weist die FIELD()-Funktion Werten in einer angegebenen Liste Ordinalpositionen zu und sortiert die Ergebnisse danach diese Positionen. Zum Beispiel die folgende Abfrage in MySQL:
SELECT * FROM `currency_codes` ORDER BY FIELD(code, 'GBP', 'EUR', 'BBD', 'AUD', 'CAD', 'USD') DESC, name ASC
sortiert die Tabelle „currency_codes“ basierend auf der in der FIELD()-Liste angegebenen Reihenfolge und dann alphabetisch nach Namen.
Um ein ähnliches Verhalten zu erreichen Postgresql können Sie eine CASE-Anweisung innerhalb der ORDER BY-Klausel verwenden:
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;
In dieser Abfrage weist die CASE-Anweisung Prioritätswerte zu (1-6) zu den Codes in der angegebenen Reihenfolge. Werte, die nicht in der Liste gefunden werden, erhalten eine Standardpriorität von 7. Die Ergebnisse werden dann in absteigender Reihenfolge der Priorität und aufsteigender Reihenfolge des Namens sortiert.
Das obige ist der detaillierte Inhalt vonWie simuliere ich die FIELD()-Funktion von MySQL in PostgreSQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!