分享八:特殊的mysql函数
一: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不在strlist或strlist 为空字符串,则返回值为 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函数的更多相关文章
- 第二百八十五节,MySQL数据库-MySQL函数
MySQL数据库-MySQL函数 1.MySQL内置函数 SELECT执行函数,后面跟要执行的函数 CHAR_LENGTH(str)函数:返回字符串的字符长度 -- CHAR_LENGTH(str)函 ...
- MySQL 函数大全
mysql函数大全 对于针对字符串位置的操作,第一个位置被标记为1. ASCII(str) 返回字符串str的最左面字符的ASCII代码值.如果str是空字符串,返回0.如果str是NULL,返回NU ...
- Mysql函数集合
Mysql提供了很多函数 提供的常用函数集合 一.数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整 ...
- mysql函数全解析
本文摘自:http://www.cnblogs.com/cocos/archive/2011/05/06/2039469.html mysql函数大全 对于针对字符串位置的操作,第一个位置被标记为1. ...
- MySQL函数大全【转载】
转载自 http://www.jb51.net/article/40179.htm 一.数学函数ABS(x) 返回x的绝对值BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) ...
- Mysql - 函数
Mysql提供的函数是在是太多了, 很多我都见过, 别说用了. 园子里面, 有人弄了一个比较全的. MYSQL函数 我这里会将他写的完全拷贝下来, 中间会插入一些自己项目中使用过的心得 一.数学函数 ...
- mysql连接查询,封装mysql函数
连接查询 交叉连接语法: select * | 字段列表 from 表1 cross join 表2 内连接: select *|字段列表 from 左表 inner join 右表 on 左表. ...
- MySQL函数不能创建的解决方法
MySQL函数不能创建,是一个很麻烦的问题,下面就为您提供了一个解决此问题的方法,如果您也遇到过类似的问题,不妨一看. http://database.51cto.com/art/201010/229 ...
- Mysql函数:Last_insert_id()语法讲解
Mysql函数可以实现许多我们需要的功能,下面介绍的Mysql函数Last_insert_id()就是其中之一,希望对您学习Mysql函数能有所帮助. 自动返回最后一个INSERT或 UPDATE 查 ...
- linux下mysql函数的详细案列
MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *pas ...
随机推荐
- Global and Local Coordinate Systems
ansys 中的坐标系 整体和局部坐标系(主要在建模中涉及) 整体坐标系是以你建模的整个建筑为一体,来确定坐标系的.比如你建一个矩形平面的建筑,整体坐标系一般默认水平方向为X轴,竖直方向为Y轴,以垂直 ...
- svmtrain princomp 出现的问题
错误一: >> modelw = svmstrain(wine_label,wine_data); Undefined function 'svmstrain' for input arg ...
- [Javascript] Prototype 1
You can add prototype to any object in Jacascript likes Object, Array, String... prototype 有继承的作用,比如 ...
- (字符串)最长公共子序列(Longest-Common-Subsequence,LCS)
问题: 最长公共子序列就是寻找两个给定序列的子序列,该子序列在两个序列中以相同的顺序出现,但是不必要是连续的. 例如序列X=ABCBDAB,Y=BDCABA.序列BCA是X和Y的一个公共子序列,但是不 ...
- RHCSA和RHCE
RHCSA: 红帽考试流程: RHCE(上下午) 上午:RHCSA(红帽认证系统管理员)下午:RHCE (红帽认证系统工程师) 上午考试通过,下午未通过(RHCSA)上午考试未通过,下午考试通过(没有 ...
- 带"叉叉"的GridView
由于需要用到“删除图片”的功能,需要写这样一个小demo: 对之前博文的修改 发现imageView监听点击事件 效果实在不敢恭维,因此换个方式:设置Touch的监听函数, 下面的Demo没有改过来哈 ...
- 微信小程序 - switchTab传值
“众所周知,switchTab是不能携带参数的” 我们有几种方式解决呢?(最好的解决方法是利用全局变量,这样可以避免因缓存造成的数据错误) 1. 通过全局变量(需要用到的页面都要引用它) 点击下载示例 ...
- Java从零开始学二十一(集合List接口)
一.List接口 List是Collection的子接口,里面可以保存各个重复的内容,此接口的定义如下: public interface List<E> extends Collecti ...
- 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 ...
- Hibernate日期映射类型
映 射 类 型 Java类型 标准SQL类型 描 述 date java.util.Date或者java.sql.Date DATE 代表日期,形式为: YYYY-MM-DD time java ...