分享八:特殊的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 ...
随机推荐
- [Node.js]23. Level 4: Semantic versioning
Update the versions on your dependencies to be a little more flexible, adding the ~ in front of your ...
- easyui tree带checkbox实现单选
<ul id="regionTree"></ul> $('#regionTree').tree({ cascadeCheck: false, //onlyL ...
- 如何使用Replace Pioneer批量查找和替换并提取指定字符串
1 我们查看源代码之后获得的网页文件如下图所示,一般都是href="/p-286018571.html"我们只要能提取到所有的"/p-XXXXXXXX.html" ...
- Android运行机制
一. Android平台各层 Android平台架构图,如下图:由上到下依次为应用程序.应用程序框架.库.Android运行时.Linux内核. 1.Linux内核: Android系统基于Linux ...
- java 笔试之在线模拟
网站地址: https://www.nowcoder.com
- ORA-14402:更新分区关键字列将导致分区更改(分区表注意)
建立完分区表后一定要和开发确认一点,就是是否会修改分区字段.因为update分区字段到其他分区时候,会报错.解决办法:开启表的行转移功能 alter table XX enable row movem ...
- [Python]网络爬虫(六):一个简单的百度贴吧的小爬虫
转自:http://blog.csdn.net/pleasecallmewhy/article/details/8927832 # -*- coding: utf-8 -*- #----------- ...
- EXCEPTION-SPRING
CreateTime--2016年8月23日09:00:47Author:Marydon 声明:异常类文章主要是记录了我遇到的异常信息及解决方案,解决方案大部分都是百度解决的,(这里只是针对我遇到 ...
- java中相同名字不同返回类型的方法
这种名字相同返回类型不同的方法,在同一个类中是无法共存的,不论是继承过来的方法,还是多实现过来的方法,在一个类内都无法共存.名字确定了,你能改的只有参数(重载).
- Linux文件大小排序
ls 文件详情 ls -S / ###从大到小排序ls -Sr / ###从小到大排就加个-r -r 翻转ls -aSr / ...