mysql自动排序
澳门新葡京官网
澳门新葡京官网
当前位置 : 澳门新葡京官网 > 新葡京娱乐场

mysql自动排序

最近在写一个项目,在项目中有一个要求是按照指定的用户指定顺序,对数据进行排序!网上百度了一下,感觉还是挺有用的,但是不是很清楚工作原理!

mysql的field函数

fileds,s1,s2....函数返回第一个与字符串s匹配的字符串的位置

mysql自定义排序的例子

准备数据

create table zero 
id int primary key AUTO_INCREMENT,
status tinyint not null default 0,
name varchar20 not null default 
engine=myisam charset=utf8


insert into zero status,name values 
                                        1,name1,
                                        2,name2, 
                                        3,name3,
                                        2,name4,
                                        4,name5,
                                        5,name6;

得到的表数据如下

mysql> select * from zero;
        +----+--------+-------+
        | id | status | name  |
        +----+--------+-------+
        |  1 |      1 | name1 |
        |  2 |      2 | name2 |
        |  3 |      3 | name3 |
        |  4 |      2 | name4 |
        |  5 |      4 | name5 |
        |  6 |      5 | name6 |
        +----+--------+-------+
        6 rows in set 0.00 sec

按照状态进行自定义排序

mysql> select * from zero order by fieldstatus, 4,2,1,3,5;
                                        +----+--------+-------+
                                        | id | status | name  |
                                        +----+--------+-------+
                                        |  5 |      4 | name5 |
                                        |  2 |      2 | name2 |
                                        |  4 |      2 | name4 |
                                        |  1 |      1 | name1 |
                                        |  3 |      3 | name3 |
                                        |  6 |      5 | name6 |
                                        +----+--------+-------+
                                        6 rows in set 0.00 sec

//注意:这里是将所有的状态都进行了列举

mysql> select * from zero order by fieldstatus, 4,2,1,3 ;
                                        +----+--------+-------+
                                        | id | status | name  |
                                        +----+--------+-------+
                                        |  6 |      5 | name6 |
                                        |  5 |      4 | name5 |
                                        |  2 |      2 | name2 |
                                        |  4 |      2 | name4 |
                                        |  1 |      1 | name1 |
                                        |  3 |      3 | name3 |
                                        +----+--------+-------+
                                        6 rows in set 0.00 sec

//注意:这里并没有列举状态5,此时状态5出现在了最上面


mysql> select * from zero order by fieldstatus, 4,2,1,3 desc ;
                                        +----+--------+-------+
                                        | id | status | name  |
                                        +----+--------+-------+
                                        |  3 |      3 | name3 |
                                        |  1 |      1 | name1 |
                                        |  2 |      2 | name2 |
                                        |  4 |      2 | name4 |
                                        |  5 |      4 | name5 |
                                        |  6 |      5 | name6 |
                                        +----+--------+-------+
                                        6 rows in set 0.00 sec

//注意:这里并没有列举状态5,此时状态5出现了最下面

mysql> select * from zero where status in 1,2,4,5 order by fieldstatus, 4,2,1,5 ;
                                        +----+--------+-------+
                                        | id | status | name  |
                                        +----+--------+-------+
                                        |  5 |      4 | name5 |
                                        |  2 |      2 | name2 |
                                        |  4 |      2 | name4 |
                                        |  1 |      1 | name1 |
                                        |  6 |      5 | name6 |
                                        +----+--------+-------+
                                        5 rows in set 0.00 sec

我的疑问!

上面仅仅是自定排序的用法,但是,我并不是特别明白filed函数,究竟在排序中发挥了什么样的作用。按照filed函数本身的作用而言,函数返回第一个与字符串匹配的,字符串的位置!
那么,返回的岂不是一个数字么?那对排序而言又有什么意义呢?

Field对目标字段进行一个自定义排序

fieldstatus, 4,2,1,3

使用这个语句它会对字段status进行一个返回,其中4->1,2->2,1->3,3->4。
至于null的值,返回0。
5为什么在正序是顶部,倒序是底部?
因为5的返回值是0,而排序是根据返回值来排的。

FIELDstr,str1,str2,str3,...

field函数返回的是str在列表[str1,str2,str3...]中的索引(即位置),然后根据结果来排序。NULL值不等于任何值在列表中无法匹配,所以NULL值或者不存在列表中的值都返回0。这个在select * from zero order by fieldstatus, 4,2,1,3 ;中体现了。

栏目列表

广告位

澳门新葡京官网