MySQL中如何将user表中以GXX开头的记录置于查询结果末尾?
实现自定义排序需求的MySQL方案
当然可以实现这个需求!我们只需要在ORDER BY子句中设置一个自定义的排序规则,就能轻松把以GXX开头的记录挪到结果最后,同时保留其他记录的原始顺序。
情况1:表中有自增主键(如id字段对应原始记录顺序)
如果你的user表有一个自增主键id(比如id值1到10正好对应你给出的原始记录顺序),那查询语句会非常简洁:
SELECT * FROM user ORDER BY -- 给GXX开头的记录标记为1,其他为0,让0的组排在前面 CASE WHEN name LIKE 'GXX%' THEN 1 ELSE 0 END, -- 按原始id顺序排序,保证组内记录保持原有顺序 id;
情况2:表中无自增主键,手动指定原始顺序
如果表中没有用来标记原始顺序的字段,我们可以用FIELD()函数来指定每条记录的排序优先级:
SELECT * FROM user ORDER BY CASE WHEN name LIKE 'GXX%' THEN 1 ELSE 0 END, FIELD( name, 'ABCD', 'hfdff', 'uiyuiyoy', 'uytitito', 'piooioi', 'tytuyur', 'zvsfsgsg', 'GXX jhjkhh', 'GXX uyyto', 'GXX upupu' );
这里FIELD()函数会按照你传入的字符串顺序给每条记录分配排序权重,既保证非GXX记录按原始顺序排列,也能让GXX记录保持它们原本的相对顺序放在最后。
核心原理
通过CASE表达式把数据分成两组:非GXX开头的为第一组(排序值0),GXX开头的为第二组(排序值1)。ORDER BY会先按这个分组值排序,让第一组全排在前面,再在组内按原始顺序排序,完美匹配你的需求。
内容的提问来源于stack exchange,提问作者Maximious
相关产品推荐
相关产品推荐

