我有一个选择语句:
$search = "SELECT Scene, Divinite, Attestation
FROM SceneDivList
WHERE BINARY Divinite = '$target'
ORDER BY FIELD( Scene);
$result = mysql_query($search, $con);
在这种情况下,结果将根据“场景”字段按字母顺序排列。
是否可以不按字母顺序而是根据以下“字母”对结果进行排序:
$alphabet = array( 1 => '-' , 2 => ',' , 3 => '.' , 4 => "A",
5 => "j", 6 => "a", 7 => "w", 8 => "b",
9 => "p", 10 => "f", 11 => "m", 12 => "n",
13 => "r", 14 => "h", 15 => "H", 16 => "x",
17 => "X", 18 => "s", 19 => "S", 20 => "q",
21 => "k", 22 => "g", 23 => "t", 24 => "T",
25 => "d", 26 => "D");
结果应该是:
SCENE ATTESTATION
jnD-Hr-m-nms,t DI.80,11
jrp DI.26,12
jrT,t DI.116,17
aAb,t DI.138,8
anx DI.12,5
antjw DI.148,10
wADw-msdm,t DI.144,11
bHsw DI.115,9
pr-n-nb=f DI.17,7
最佳答案
最干净的解决方案是 define your own custom collation并指定 Scene
列应使用它。如果你这样做,查询将简单地读取 ORDER BY Scene
,就是这样(顺便说一句,ORDER BY FIELD(Scene)
没有意义 - 你检查过吗FIELD
做什么?)。
除此之外,您还可以基于STR_REPLACE
拼凑出一个噩梦,以使数据适应排序规则,而不是做相反的事情,但我不会这样做。
当然,您可以避开所有这些并在 PHP 中进行排序,这样会更方便,但这种方法不适用于连接必须自行排序的子查询的查询。
关于php - 确定 ORDER BY 语句中的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10122619/