MySql 按最后上传的字段排序在排序 ID 的前面

MySql Order by Field last uploaded get first in front of ordered id's

我正在尝试订购一些数据并使用 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)');

您可以在 order by:

中使用 if 语句
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 returns 0 对于不匹配的记录,这将 return 排在列表的顶部。这迫使未找到的记录到底部。

一种无需重复表达式的解决方案是将 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

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