所以我有一个查询,我用于条形图中的标签。我在PHP中使用fetch_array提取这些标签。标签顺序应为:
白人,非裔美国人,西班牙裔等等。
但是一旦我们通过asc或desc执行任何类型的顺序,它们就会按字母顺序排列,例如
非裔美国人,西班牙裔,白人。有没有办法按特定顺序专门订购这些?
答案 0 :(得分:0)
使用CASE
语句指定排序顺序。它将为值White
分配0,为所有其他值分配1,然后按字母顺序对剩余值进行排序。
ORDER BY
CASE WHEN label='White' THEN 0 ELSE 1 END,
label ASC
答案 1 :(得分:0)
您应该在其他地方定义订单(因为您的订单是自由形式的,您不能依赖自动解决方案)。
一个技巧可能是在表格中添加myorder
字段,因此您可以在查询中指定ORDER BY myorder
:
id desc myorder
.. ......... ..........
1 Hispanic 3
2 White 2
3 African- 1
这种方法的一个优点是它可以重复使用,您可以按软件方式编辑订单(如果您需要这种特殊选项)并适用于任意数量的行。
答案 2 :(得分:-2)
在mysql中,您可以使用field function进行自定义排序。例如:
SELECT * FROM GraphTable ORDER BY FIELD(GraphLabel, 'White', 'African American', 'Hispanic')
或者通过id:
SELECT * FROM GraphTable ORDER BY FIELD(LabelID, 123, 456, 234);
来自mysql手册:
FIELD(STR,STR1,STR2,STR3,...)
返回str1,str2,str3,...列表中str的索引(位置)。如果未找到str,则返回0。