您的位置:首页 > 数据库 > MySQL

MySQL自定义排序函数FIELD()

2014-04-18 10:05 337 查看
MySQL可以通过field()函数自定义排序,格式:field(value,str1,str2,str3,str4),value与str1、str2、str3、str4比较,返回1、2、3、4,如遇到null或者不在列表中的数据则返回0.这个函数好像Oracle中没有专门提供(也可能是我没有用到),不过自己实现这样一个函数还是比较简单的。

mysql> select * from driver_log order byname;

+--------+-------+------------+-------+

| rec_id | name | trav_date | miles |

+--------+-------+------------+-------+

| 1 | Ben | 2006-08-30| 152 |

| 9 | Ben | 2006-09-02| 79 |

| 5 | Ben | 2006-08-29| 131 |

| 8 | Henry | 2006-09-01 | 197 |

| 6 | Henry | 2006-08-26 | 115 |

| 4 | Henry | 2006-08-27 | 96 |

| 3 | Henry | 2006-08-29 | 300 |

| 10 | Henry | 2006-08-30 | 203 |

| 7 | Suzi | 2006-09-02| 502 |

| 2 | Suzi | 2006-08-29| 391 |

+--------+-------+------------+-------+

10 rows in set (0.00 sec)

mysql> select * from driver_log order byfield(name,'Suzi','Ben','Henry');

+--------+-------+------------+-------+

| rec_id | name | trav_date | miles |

+--------+-------+------------+-------+

| 2 | Suzi | 2006-08-29| 391 |

| 7 | Suzi | 2006-09-02| 502 |

| 1 | Ben | 2006-08-30| 152 |

| 9 | Ben | 2006-09-02| 79 |

| 5 | Ben | 2006-08-29| 131 |

| 8 | Henry | 2006-09-01 | 197 |

| 6 | Henry | 2006-08-26 | 115 |

| 4 | Henry | 2006-08-27 | 96 |

| 3 | Henry | 2006-08-29 | 300 |

| 10 | Henry | 2006-08-30 | 203 |

+--------+-------+------------+-------+

10 rows in set (0.00 sec)

mysql> select * from driver_log order byfield(name,'Suzi','Ben');

+--------+-------+------------+-------+

| rec_id | name | trav_date | miles |

+--------+-------+------------+-------+

| 10 | Henry | 2006-08-30 | 203 |

| 8 | Henry | 2006-09-01 | 197 |

| 6 | Henry | 2006-08-26 | 115 |

| 4 | Henry | 2006-08-27 | 96 |

| 3 | Henry | 2006-08-29 | 300 |

| 7 | Suzi | 2006-09-02| 502 |

| 2 | Suzi | 2006-08-29| 391 |

| 5 | Ben | 2006-08-29| 131 |

| 9 | Ben | 2006-09-02| 79 |

| 1 | Ben | 2006-08-30| 152 |

+--------+-------+------------+-------+

10 rows in set (0.00 sec)

mysql> select * from driver_log order byfield(name,'Suzi','Ben') desc;

+--------+-------+------------+-------+

| rec_id | name | trav_date | miles |

+--------+-------+------------+-------+

| 1 | Ben | 2006-08-30| 152 |

| 9 | Ben | 2006-09-02| 79 |

| 5 | Ben | 2006-08-29| 131 |

| 2 | Suzi | 2006-08-29| 391 |

| 7 | Suzi | 2006-09-02| 502 |

| 8 | Henry | 2006-09-01 | 197 |

| 6 | Henry | 2006-08-26| 115 |

| 4 | Henry | 2006-08-27 | 96 |

| 3 | Henry | 2006-08-29 | 300 |

| 10 | Henry | 2006-08-30 | 203 |

+--------+-------+------------+-------+

10 rows in set (0.00 sec)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: