在PostgreSQL 中模擬MySQL 的ORDER BY FIELD()
作為一個遷移到PostgreSQL 的MyORDER,你可能會遇到BY 的限制後者資料庫不支援FIELD() 語法。這就提出瞭如何在 PostgreSQL 中模擬其行為的問題。
問題:
MySQL 允許您使用 ORDER BY FIELD() 子句定義自訂順序。它接受一個值和一系列期望值,查詢結果按照提供的值的順序排序。
例如:
SELECT * FROM `currency_codes` ORDER BY FIELD(code, 'GBP', 'EUR', 'BBD', 'AUD', 'CAD', 'USD') DESC, name ASC
此查詢將優先考慮具有按順序編碼“GBP”、“EUR”、“BBD”、“AUD”、“CAD”和“USD”,同時進一步依升序對結果進行排序'name' 欄位。
解決方案:
在 PostgreSQL 中,您可以使用 CASE 語句的組合併按結果數值排序來實現類似的功能。
以下是如何模擬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;
在此查詢中:
此技術可讓您根據預先定義的順序對行進行優先排序,提供與 MySQL ORDER BY FIELD() 子句的功能非常接近的功能。
以上是如何在PostgreSQL中模擬MySQL的ORDER BY FIELD()?的詳細內容。更多資訊請關注PHP中文網其他相關文章!