MYSQL自定义排序可使用的三种函数:
- order by field
- order by instr
- order by locate
实例
1. FIELD函数
- 格式:filed(value,str1,str2,str3,str4)
- 原理:value与str1、str2、str3、str4比较,返回1、2、3、4;如遇到null或者不在列表中的数据则返回0
- 使用实例:
SELECT * FROM user order by field(id,2,3,5,4) desc
输出结果:4 5 3 2 1 6
id uname passwd
4 dd dd
5 ee ee
3 cc cc
2 bb bb
1 aa aa
6 ff ff
2. INSTR函数
- 格式:INSTR(字段名,字符串)
- 原理:返回字符串在某一字段的内容中的位置;
没有找到字符串返回0,否则返回位置(从1开始) - 使用实例:
ASC
SELECT * FROM user ORDER BY INSTR( ’2,3,5,4′, id ) ASC
输出结果:1 6 2 3 5 4
1 aa aa
6 ff ff
2 bb bb
3 cc cc
5 ee ee
4 dd dd
DESC
SELECT * FROM user ORDER BY INSTR( ’2,3,5,4′, id ) DESC
输出结果:4 5 3 2 1 6
4 dd dd
5 ee ee
3 cc cc
2 bb bb
1 aa aa
6 ff ff
3.LOCAL函数
-
格式:
-
原理:
-
使用实例:
ASC
SELECT * FROM user ORDER BY locate( id, ’2,3,5,4′ ) ASC
输出结果:1 6 2 3 5 4
1 aa aa
6 ff ff
2 bb bb
3 cc cc
5 ee ee
4 dd dd
DESC
SELECT * FROM user ORDER BY locate( id, ’2,3,5,4′ ) DESC
输出结果:4 5 3 2 1 6
4 dd dd
5 ee ee
3 cc cc
2 bb bb
1 aa aa
6 ff ff
需求:
查找的数据库中的ID顺序首先是(2,3,5,4)然后再是其它的ID顺序,步骤如下:
首先降序排即(4 5 3 2), 然后sql语句如下
SELECT * FROM user order by field(id,4,5,3,2) DESC
或
SELECT * FROM user ORDER BY INSTR( ’4,5,3,2′, id ) DESC
或
SELECT * FROM user ORDER BY locate( id, ’4,5,3,2′ ) DESC