我已经看到许多关于如何使用特定顺序而不是使用默认的ASCDESC选项进行排序的主题。但是,我在列中有一系列值,我希望一个特定值始终位于顶部,一个特定值我希望始终位于底部,其他所有值都可以通过ASC在两者之间进行排序。让我在下面提供一个通用示例。想象一下,我有一列信息如下。

Value1 | Value5 | Value3 | Value9 | Value8 | Value7 | Value5 | Value3 | Value6


注意:为了便于讨论,请假装这是一栏而不是一行信息。在此论坛上以水平显示的间距很容易。请想象这是一个垂直列表。

我希望Value5在订单的顶部,Value3在底部。这样信息行将按以下顺序返回:

Value5 | Value5 | Value1 | Value6 | Value7 | Value8 | Value9 | Value3 | Value3


请注意,5排在最前面,3排在最后,其他所有内容均按字母顺序返回在这两个值之间。

我正在使用PHP,以防万一。

最佳答案

您需要在查询的ORDER BY子句上使用条件语句:

ORDER BY CASE WHEN col = 'Value5' THEN 1
              WHEN col = 'Value3' THEN 3
              ELSE 2 END ASC,
         col ASC

09-18 03:04