在MYSQL数据库查询时,排序是经常用到的一个功能。单纯按照某字段排序查询较为简单,无非就是order by `field` (DESC/ASC)。如:
1 | SELECT * FROM `table` |
2 | ORDER BY `field` DESC |
注:上面的table换成要查询的表名,field换成要排序的字段名,DESC表示从大到小,去掉则从小到大。
下面介绍几个复杂一点的应用:
自定义排序
需求:查询table表,取出id为1,5,9,7的记录,并按1597的顺序显示.
解决:
1 | SELECT * FROM `table` |
2 | WHERE id in(1,5,7,9) |
3 | ORDER BY FIELD(`id`,1,5,9,7) //注意FIELD后面无空格 |
文章置顶
需求一:查询文章表table,取出所有文章,但字段zj为1的记录置顶(均以time字段排序,time大的 放在前面)。
解决一:
1 | SELECT * FROM `table` |
2 | ORDER BY `zj` DESC,`time` DESC |
解决二:
1 | SELECT * FROM `table` |
2 | WHERE zj=1 |
3 | ORDER BY `time` DESC |
4 | UNION |
5 | SELECT * FROM `table` |
6 | WHERE zj!=1 |
7 | ORDER BY `time` DESC |
需求二:查询文章表table,取出所有文章,置顶ID为1、5、12、2的文章,并按上述顺序显示。
解决:
1 | SELECT * FROM `table` |
2 | ORDER BY FIELD(`zj`,1,5,12,2) DESC,`time` DESC |