在获取数组中按某个序列排序

时间:2012-06-19 16:45:35

标签: php mysql

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

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

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

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

3 个答案:

答案 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。