按获取数组中的特定顺序排序


ORDER BY a certain sequence in a fetch array

所以我有一个查询,我正在用于条形图中的标签。我正在使用 PHP 中的fetch_array提取这些标签。标签顺序应为:

白人,非裔美国人,西班牙裔等。

但是一旦我们按ASC或DESC进行任何类型排序,它们就会按字母顺序排列,例如

非裔美国人,西班牙裔,白人。有没有办法按一定的顺序专门排序这些?

> 使用 CASE 语句指定排序顺序。 它将为值 White 分配 0,为所有其他值分配 1,然后按字母顺序对其余值进行排序。

ORDER BY
  CASE WHEN label='White' THEN 0 ELSE 1 END,
  label ASC

您应该在其他地方定义订单(因为您的订单是自由格式的,因此不能依赖自动解决方案)。一个技巧可能是在表中添加myorder字段,以便您可以在查询中指定ORDER BY myorder

 id  desc      myorder
 ..  ......... ..........
 1   Hispanic  3
 2   White     2
 3   African-  1

这种方法的一个优点是它是可重用的,您可以在软件上编辑顺序(如果您需要这种特定类型的选项)并适用于任意数量的行。

在 MySQL 中,您可以使用字段函数进行自定义排序顺序。例如:

SELECT * FROM GraphTable ORDER BY FIELD(GraphLabel, 'White', 'African American', 'Hispanic')

或按 id:

SELECT * FROM GraphTable ORDER BY FIELD(LabelID, 123, 456, 234);

来自 mysql 手册:

字段(str,str1,str2,str3,...)

返回 str 在 str1, str2, str3, ...列表。如果未找到 str,则返回 0。