Mysql函数FIND_IN_SET()的使用方法

Mysql函数FIND_IN_SET()的使用方法

https://www.cnblogs.com/gpfeisoft/p/5535450.html

有了FIND_IN_SET这个函数。我们可以设计一个如:一只手机即是智能机,又是Andriod系统的。

比如:有个产品表里有一个type字段,他存储的是产品(手机)类型,有 1、智能机,2、Andriod系统,3、小米系统,4、1000元以下

现在有条手机的记录即是1000元以下的,又是智能机,还是Andriod的系统。

type中以 4,1,2的格式存储.

那们我们如何用sql查找所有type中有4的1000元以下的手机呢,

这就要我们的find_in_set出马的时候到了.

先看MySQL手册中find_in_set函数的语法:

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’);

+—————————-+

| FIND_IN_SET(‘b’,’a,b,c,d’) |

+—————————-+

|                          2 |

+—————————-+

1 row in set (0.00 sec)

用起来很简单

就以上面我说到的情况来举例:

以下为实际应用当中的SQL语句:

select * from mobile where FIND_IN_SET(‘4’,type);

这个就可以找出所有1000元以下手机的记录!

 

______________________________________________________________________________________________________________

查询表字段 pingid = (1,2,3,)

 

SELECT * FROM `linkinfo` WHERE `pingid` REGEXP ‘{id},’ AND `pingid` NOT REGEXP ‘[[:alnum:]]+{id},’   使用上面的语句,可以查询出来

 

用FIND_IN_SET() 更简单

 

SELECT * FROM linkinfo WHERE FIND_IN_SET( ‘1’, pingid )

 

 

 

原来以为mysql可以进行这样的查询
select id, list, name from table where ‘daodao’ IN (list);      (一)
注:1. table含有三个字段id:int, list:varchar(255), name:varchar(255)

实际上这样是不行的,这样只有当name是list中的第一个元素时,查询才有效,否则都的不到结果,即使’daodao’真的再list中

再来看看这个:
select id, list, name from table where ‘daodao’ IN (‘libk’, ‘zyfon’, ‘daodao’);    (二)
这样是可以的
———————————————————

这两条到底有什么区别呢?为什么第一条不能取得正确的结果,而第二条却能取得结果。

原因其实是(一)中 (list)    list是变量, 而(二)中 (‘libk’, ‘zyfon’, ‘daodao’)是常量

所以如果要让(一)能正确工作,需要用find_in_set():
select id, list, name from table where FIND_IN_SET( ‘daodao’ , list); (一)的改进版。

总结:所以如果list是常量,则可以直接用IN, 否则要用FIND_IN_SET()函数

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/113102.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • GSLB调度服务原理

    GSLB调度服务原理GSLB,全局负载均衡(GlobalServerLoadBalancing),主要的目的是在整个网络范围内将用户的请求定向到最近的节点(或者区域)。是对物理集群的负载均衡,不止是简单的流量均匀分配,还会根据应用场景的不同来制定不同的策略。本文将讨论GSLB的几种实现,并介绍调度服务实现的大体情况。

    2022年6月11日
    32
  • 进程管理之进程调度「建议收藏」

    进程管理之进程调度「建议收藏」文章目录一、进程调度基础1、进程调度定义2、进程调度目标二、基本调度算法1、先来先服务算法2、时间片轮转算法3、短任务优先算法4、优先级调度算法5、混合调度算法  在多进程并发的环境里,虽然从概念上看,有多个进程在同时执行,但在单个CPU下,在任何时刻只能有一个进程处于执行状态,而其他进程则处于非执行状态。那么问题来了,我们是如何确定在任意时刻到底由哪个进程执行,哪些不执行呢?这就涉及到进程管理…

    2022年9月29日
    2
  • 最新慧联A6六轴陀螺仪(阿u)

    Lua固件更新说明如下:首推1.3基线,不支持1.2基线空中升级到1.3基线版本目录名称1.3底层core下载地址1.2底层core下载地址上层软件下载地址1.3底层core固件更新说明1.2底层core固件更新说明上层脚本更新说明空间说明Luat二次开发使用的Flash空间有两部分:脚本区和文件系统区脚本区:通过Luatools烧写的所有文件,都存放在此区域非TTS版本为720KB,TTS版本为426KB;如果烧录时,超过此限制,Luatools会报错不同版本的core可能会有差异,以

    2022年4月14日
    81
  • CAS锁(cas自旋锁原理)

    参考文档:http://www.blogjava.net/xylz/archive/2010/07/04/325206.htmlhttp://blog.hesey.net/2011/09/resolve-aba-by-atomicstampedreference.htmlhttp://www.searchsoa.com.cn/showcontent_69238.htm

    2022年4月17日
    66
  • js Map对象的用法[通俗易懂]

    js Map对象的用法[通俗易懂]第一篇:Map:Map是一组键值对的结构,具有极快的查找速度。举个例子,假设要根据同学的名字查找对应的成绩,如果用Array实现,需要两个Array:varnames=[‘Michael’,’Bob’,’Tracy’];varscores=[95,75,85];给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores取出对应…

    2025年9月16日
    9
  • quota的使用方法

    from:http://man.chinaunix.net/linux/how/Quota.html   序言:这份文件的版权由AlbertM.C.Tam(bertie@scn.org)所保留。同意这份文件的使用、复制,因此非商业性的散布是允许的,但是所有的拷贝以及/或是没有修改直接援用的文件上须有作者与编者的名字及这份注意事项。这份文件是因为希望能有所帮助

    2022年4月8日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号