使用多个值自定义 SQL 结果排序
使用包含大量字段的 SQL 表(尤其是那些没有索引的字段)可能会使检索和排序特定记录成为一项复杂的任务。 假设您有一个带有非索引 x_field
的表。 简单地将 ORDER BY
与多个值一起使用并不能保证您需要的顺序。
例如,这个查询是有缺陷的:
<code class="language-sql">SELECT * FROM table WHERE id NOT IN (126) ORDER BY x_field 'f', 'p', 'i', 'a'</code>
语法不正确,不会产生预期的结果。解决方案在于使用 CASE
语句显式定义顺序:
<code class="language-sql">SELECT * FROM table WHERE x_field IN ('f', 'p', 'i', 'a') ORDER BY CASE x_field WHEN 'f' THEN 1 WHEN 'p' THEN 2 WHEN 'i' THEN 3 WHEN 'a' THEN 4 ELSE 5 -- Handles values outside the specified set END, id</code>
此精炼查询将数字顺序值分配给每个所需的 x_field
值。 带有 x_field = 'f'
的记录首先出现,然后是“p”、“i”和“a”。 任何其他 x_field
值将在末尾分组,按 id
排序。这种方法为管理 SQL 中的复杂排序场景提供了一种灵活可靠的方法。
以上是如何按预定义序列中的多个值对 SQL 结果进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!