在 PostgreSQL 中模拟 MySQL 的 ORDER BY FIELD()
作为一个迁移到 PostgreSQL 的 MySQL 用户,你可能会遇到 ORDER 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中文网其他相关文章!