MySql按字段顺序上次上传在订购ID的前面获取

时间:2016-03-02 21:29:04

标签: php mysql sql-order-by

我正在尝试订购一些数据并使用ORDER BY FIELD。给定id的顺序看起来很好,但是当我在数据库中添加另一条记录时,这条记录就会出现在有序id的数据前面。当我添加另一条记录时,我希望该记录成为有序记录之后的最后一条记录。我使用的代码如下:

$result = mysqli_query($conn, 'SELECT * FROM echipa ORDER BY FIELD(id_profesor, 14,17,16,24,25,22,26,19,20,21,18,23)');

2 个答案:

答案 0 :(得分:1)

您不必重复表达的一个解决方案是将0转换为NULL,然后将NULL转换为其他内容:

ORDER BY COALESCE(NULLIF(FIELD(id_profesor, 14,17,16,24,25,22,26,19,20,21,18,23), 0), 9999)

另一种方法是使用降序排序NULL的最后一个事实:

ORDER BY FIELD(id_profesor, 14,17,16,24,25,22,26,19,20,21,18,23) DESC

但是,您可能希望颠倒列表的顺序以使行保持原始顺序。

或者,如果你真的想要花哨,你可以这样做:

ORDER BY - NULLIF(FIELD(id_profesor, 14,17,16,24,25,22,26,19,20,21,18,23), 0) DESC

在这种情况下,我会认为意图相当难以理解。

答案 1 :(得分:0)

您可以在if

中使用order by语句
SELECT * 
FROM echipa 
ORDER BY IF(FIELD(id_profesor, 14,17,16,24,25,22,26,19,20,21,18,23)=0,1,0),
    FIELD(id_profesor, 14,17,16,24,25,22,26,19,20,21,18,23)

问题是field为非匹配记录返回0,这将返回列表顶部。这会强制找不到底部的记录。