MySQL使用FIELD自定义排序,如何让未知值排在末尾?
解决MySQL自定义排序中未知值后置的问题
可以通过给排序条件增加一个分组判断,用简洁的方式实现需求,不用复杂的CASE/WHEN:
ORDER BY FIELD(Language, 'ENU', 'JPN', 'DAN') = 0, FIELD(Language, 'ENU', 'JPN', 'DAN'), Language, ID
逻辑解释:
- 第一个排序项:
FIELD(Language, 'ENU', 'JPN', 'DAN') = 0
对于指定的语言(ENU/JPN/DAN),FIELD会返回1/2/3,和0比较结果为false(对应数值0);未知语言(如RUS/ESP)返回0,比较结果为true(对应数值1)。排序时0在前、1在后,直接把指定语言组和未知语言组分开,指定组排前面。 - 第二个排序项:
FIELD(Language, 'ENU', 'JPN', 'DAN')
在指定语言组内部,按照你需要的自定义顺序(ENU→JPN→DAN)排序。 - 第三个排序项:
Language
未知语言组内部,按照语言代码的字母顺序排序(比如ESP会排在RUS前面)。 - 最后一个排序项:
ID
保证同一语言、同一排序组内的记录按ID保持有序。
这样就能完美实现:先按自定义顺序排列指定语言,再把所有未知语言按字母顺序排在末尾的需求。
内容的提问来源于stack exchange,提问作者Stephen R
相关产品推荐
相关产品推荐

