一:MYSQL自定义排序函数FIELD()

MySQL可以通过field()函数自定义排序,格式:field(value,str1,str2,str3,str4),value与str1、str2、str3、str4比较,返回1、2、3、4,如遇到null或者不在列表中的数据则返回0.

mysql> select * from driver_log order by field(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 |

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

mysql> select * from 表名 order by field(id,4,2,3,1);

+——–+——–+————+——-+
| id     | name
+——–+——–+————+——-+
|  4    |
|  2    |
|  3    |
|  1    |
+——–+—— -+————+——-+

那么它就会按照id为4,2,3,1的顺序排序
根据id字段自定义排序
mysql> select * from 表名 order by field(id,1,4,2,3) desc;

+——–+——–+————+——-+
| id     | name
+——–+——–+————+——-+
|  3    |
|  2    |
|  4    |
|  1    |
+——–+—— -+————+——-+

根据wp_posts表ID字段自定义排序:

SELECT wp_posts.ID FROM wp_posts WHERE wp_posts.ID IN (4687,4728,4730,4740)
AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')
ORDER BY FIELD( wp_posts.ID, 4687,4728,4730,4740 ) LIMIT 0, 20

二:find_in_set()

1、函数简介

FIND_IN_SET(str,strlist)

假如字符串str 在由N 子链组成的字符串列表strlist 中, 则返回值的范围在 1 到N 之间 。一个字符串列表就是一个由一些被‘,’符号分开的自链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则 FIND_IN_SET() 函数被优化,使用比特计算。如果str不在strliststrlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。 这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。

mysql> SELECT FIND_IN_SET('b','a,b,c,d');

-> 2

2、FIND_IN_SET 和 IN 的区别

网上现成的代码,拿过来用一下:

CREATE TABLE `test` (

`id` int(8) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`list` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `test` VALUES (1, 'name', 'daodao,www.111cn.net,xiaoqin');

INSERT INTO `test` VALUES (2, 'name2', 'xiaohu,daodao,xiaoqin');
INSERT INTO `test` VALUES (3, 'name3', 'xiaoqin,daodao,www.111cn.net');

执行语句如下:

sql1: SELECT id, LIST, NAME FROM test WHERE 'daodao' IN (LIST);

sql2: SELECT id, LIST, NAME FROM test WHERE 'daodao' IN ('libk', 'zyfon', 'daodao');

执行结果如下:

sql1 查询结果为空

sql2能够查询出数据

为什么sql1不能取得正确的结果,而sql2却能取得结果?

是因为sql1中 IN (list), list 是变量,而sql2中 IN ('libk', 'zyfon', 'daodao'),('libk', 'zyfon', 'daodao')是常量。mysql中In是比较等不等,此处‘list’是表中的一个字段,也就是变量,除非它的值刚好和name的值一样,否则返回的结果都为空。如果要让sql1能查处正确的结果,需要用FIND_IN_SET()函数。mysql中FIND_IN_SET函数用来比较是不是包含,不管‘list’字段是变量或给定的字符串常量都能很好的工作。

sql3:SELECT id, LIST, NAME FROM `test` WHERE FIND_IN_SET('daodao',`list`);

分享八:特殊的mysql函数的更多相关文章

  1. 第二百八十五节,MySQL数据库-MySQL函数

    MySQL数据库-MySQL函数 1.MySQL内置函数 SELECT执行函数,后面跟要执行的函数 CHAR_LENGTH(str)函数:返回字符串的字符长度 -- CHAR_LENGTH(str)函 ...

  2. MySQL 函数大全

    mysql函数大全 对于针对字符串位置的操作,第一个位置被标记为1. ASCII(str) 返回字符串str的最左面字符的ASCII代码值.如果str是空字符串,返回0.如果str是NULL,返回NU ...

  3. Mysql函数集合

    Mysql提供了很多函数 提供的常用函数集合 一.数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整 ...

  4. mysql函数全解析

    本文摘自:http://www.cnblogs.com/cocos/archive/2011/05/06/2039469.html mysql函数大全 对于针对字符串位置的操作,第一个位置被标记为1. ...

  5. MySQL函数大全【转载】

    转载自 http://www.jb51.net/article/40179.htm 一.数学函数ABS(x)   返回x的绝对值BIN(x)   返回x的二进制(OCT返回八进制,HEX返回十六进制) ...

  6. Mysql - 函数

    Mysql提供的函数是在是太多了, 很多我都见过, 别说用了. 园子里面, 有人弄了一个比较全的. MYSQL函数 我这里会将他写的完全拷贝下来, 中间会插入一些自己项目中使用过的心得 一.数学函数 ...

  7. mysql连接查询,封装mysql函数

    连接查询 交叉连接语法: select  * | 字段列表 from 表1  cross join 表2 内连接: select *|字段列表 from 左表 inner join 右表 on 左表. ...

  8. MySQL函数不能创建的解决方法

    MySQL函数不能创建,是一个很麻烦的问题,下面就为您提供了一个解决此问题的方法,如果您也遇到过类似的问题,不妨一看. http://database.51cto.com/art/201010/229 ...

  9. Mysql函数:Last_insert_id()语法讲解

    Mysql函数可以实现许多我们需要的功能,下面介绍的Mysql函数Last_insert_id()就是其中之一,希望对您学习Mysql函数能有所帮助. 自动返回最后一个INSERT或 UPDATE 查 ...

  10. linux下mysql函数的详细案列

    MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *pas ...

随机推荐

  1. Global and Local Coordinate Systems

    ansys 中的坐标系 整体和局部坐标系(主要在建模中涉及) 整体坐标系是以你建模的整个建筑为一体,来确定坐标系的.比如你建一个矩形平面的建筑,整体坐标系一般默认水平方向为X轴,竖直方向为Y轴,以垂直 ...

  2. svmtrain princomp 出现的问题

    错误一: >> modelw = svmstrain(wine_label,wine_data); Undefined function 'svmstrain' for input arg ...

  3. [Javascript] Prototype 1

    You can add prototype to any object in Jacascript likes Object, Array, String... prototype 有继承的作用,比如 ...

  4. (字符串)最长公共子序列(Longest-Common-Subsequence,LCS)

    问题: 最长公共子序列就是寻找两个给定序列的子序列,该子序列在两个序列中以相同的顺序出现,但是不必要是连续的. 例如序列X=ABCBDAB,Y=BDCABA.序列BCA是X和Y的一个公共子序列,但是不 ...

  5. RHCSA和RHCE

    RHCSA: 红帽考试流程: RHCE(上下午) 上午:RHCSA(红帽认证系统管理员)下午:RHCE (红帽认证系统工程师) 上午考试通过,下午未通过(RHCSA)上午考试未通过,下午考试通过(没有 ...

  6. 带"叉叉"的GridView

    由于需要用到“删除图片”的功能,需要写这样一个小demo: 对之前博文的修改 发现imageView监听点击事件 效果实在不敢恭维,因此换个方式:设置Touch的监听函数, 下面的Demo没有改过来哈 ...

  7. 微信小程序 - switchTab传值

    “众所周知,switchTab是不能携带参数的” 我们有几种方式解决呢?(最好的解决方法是利用全局变量,这样可以避免因缓存造成的数据错误) 1. 通过全局变量(需要用到的页面都要引用它) 点击下载示例 ...

  8. Java从零开始学二十一(集合List接口)

    一.List接口 List是Collection的子接口,里面可以保存各个重复的内容,此接口的定义如下: public interface List<E> extends Collecti ...

  9. weblogic.servlet.proxy.HttpProxyServlet 进行代理设置

    1:代理访问服务器应用配置 A:192.168.0.11 B:192.168.0.12 访问:http://192.168.0.11:9001/test/test.jsp 代理服务直接代理访问: ht ...

  10. Hibernate日期映射类型

    映 射 类 型 Java类型 标准SQL类型 描    述 date java.util.Date或者java.sql.Date DATE 代表日期,形式为: YYYY-MM-DD time java ...