我正在尝试订购一些数据并使用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)');
答案 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,这将返回列表顶部。这会强制找不到底部的记录。