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
我认为这种情况下的意图相当难以理解。
我正在尝试订购一些数据并使用 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
我认为这种情况下的意图相当难以理解。