php - 确定 ORDER BY 语句中的顺序

标签 php mysql

我有一个选择语句:

$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/

相关文章:

php - 使用 php 检测机器人

php - CakePHP 在创建新用户失败时填写密码字段

php - 邻接表与嵌套集模型

php - 选择 VARCHAR 列的最大值 - MySQL

带游标的Mysql存储过程

php - 如何生成像数据透视表这样的 SQL 查询

php - Neo4j 中的密码限制包括重复行

php - 在 PHP 中运行异步函数的最有效方法是什么?

php - 如何避免在 php 表单中多次输入相同的用户名?

mysql - 如何使用 Korma 配置 transient 场