所以我有一个查询,用于条形图中的标签。我在 PHP 中使用 fetch_array 提取这些标签。标签顺序应为:
白人、非裔美国人、西班牙裔等。
但是一旦我们按 asc 或 desc 进行任何类型排序,它们就会按字母顺序排列,例如
非裔美国人、西班牙裔、白人。有没有办法按一定的顺序专门订购这些?
使用CASE
语句来指定您的排序顺序。它将为该值分配 0,White
为所有其他值分配 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,...)
返回 str1, str2, str3, ... 列表中 str 的索引(位置)。如果未找到 str,则返回 0。