Simulieren von MySQLs ORDER BY FIELD() in PostgreSQL
Als MySQL-Benutzer, der auf PostgreSQL umsteigt, stoßen Sie möglicherweise auf die Einschränkung, die ORDER BY Die FIELD()-Syntax wird in der letztgenannten Datenbank nicht unterstützt. Dies wirft die Frage auf, wie man sein Verhalten in PostgreSQL emulieren kann.
Problem:
MySQL ermöglicht es Ihnen, eine benutzerdefinierte Reihenfolge mithilfe der ORDER BY FIELD()-Klausel zu definieren. Es nimmt einen Wert und eine Reihe erwarteter Werte an und die Abfrageergebnisse werden in der Reihenfolge der bereitgestellten Werte sortiert.
Zum Beispiel:
SELECT * FROM `currency_codes` ORDER BY FIELD(code, 'GBP', 'EUR', 'BBD', 'AUD', 'CAD', 'USD') DESC, name ASC
Diese Abfrage würde Zeilen mit priorisieren Codes „GBP“, „EUR“, „BBD“, „AUD“, „CAD“ und „USD“ in dieser Reihenfolge, während die Ergebnisse weiter in aufsteigender Reihenfolge nach „Name“ sortiert werden. Spalte.
Lösung:
In PostgreSQL können Sie eine ähnliche Funktionalität erreichen, indem Sie eine Kombination aus CASE-Anweisungen und der Reihenfolge nach den resultierenden numerischen Werten verwenden.
So können Sie das Verhalten der ORDER BY FIELD()-Klausel simulieren:
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;
Hier Abfrage:
Mit dieser Technik können Sie Zeilen basierend auf einer vordefinierten Reihenfolge priorisieren und so eine gute Annäherung an diese Reihenfolge erzielen die Funktionalität der MySQL ORDER BY FIELD()-Klausel.
Das obige ist der detaillierte Inhalt vonWie simuliere ich MySQLs ORDER BY FIELD() in PostgreSQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!