0

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

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

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

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

4

3 回答 3

0

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

ORDER BY
  CASE WHEN label='White' THEN 0 ELSE 1 END,
  label ASC
于 2012-06-19T16:47:51.427 回答
0

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

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

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

于 2012-06-19T16:48:00.213 回答
-2

在 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,...)

返回 str1, str2, str3, ... 列表中 str 的索引(位置)。如果未找到 str,则返回 0。

于 2012-06-19T16:47:09.077 回答