mysql中find_in_set()函数的使用

2023-05-16

在做电商项目时,不知你有没有遇到这样的一种情况,mysql数据库中商品表tb_product里面有个字段type,它存储的是商品类型,比如

  • 1:热门推荐

  • 2:精选推荐

  • 3:品牌商品等。

有些商品既属于热门推荐,也属于精选推荐,同时还是品牌商品,系统中type中用 1,2,3 这样的格式存储。

这时业务人员希望你帮忙导出今日所有type中有3品牌商品的商品,你会怎么做?

这时find_in_set函数就派上用场了。

select * from tb_article where find_in_set('3',type)

或许你对find_in_set 这个函数有点陌生,不急,我们看看官网是怎么说的

Returns a value in the range of 1 to N if the string str is in the string list strlist consisting of N substrings. A string list is a string composed of substrings separated by , characters. If the first argument is a constant string and the second is a column of type SET, the FIND_IN_SET() function is optimized to use bit arithmetic. Returns 0 if str is not in strlist or if strlist is the empty string. Returns NULL if either argument is NULL. This function does not work properly if the first argument contains a comma (,) character.

如果字符串str在由N个子字符串组成的字符串列表strlist中,则返回1到N范围内的值。字符串列表是由,个字符分隔的子字符串组成的字符串。如果第一个参数是常量字符串,第二个参数是SET类型的列,则FIND_IN_SET()函数将优化为使用位算术。如果str不在strlist中或strlist是空字符串,则返回0。如果任一参数为NULL,则返回NULL。如果第一个参数包含逗号(,)字符,则此函数无法正常工作。

比如

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

结果为 2 因为b 在strlist集合中放在2的位置 从1开始。

我们验证下:

  • select FIND_IN_SET('1', '1'); 返回 1

  • select FIND_IN_SET('2', '1,2'); 返回2 注意第二个参数是用英文逗号隔开,如果是中文逗号 select FIND_IN_SET('2', '1,2'); 返回 0

  • select FIND_IN_SET('88', '1'); 返回0

需要注意的是:

select * from tb_user where FIND_IN_SET(id, '1,2,3,4,5');

使用find_in_set函数一次返回多条记录,其中id 是表的字段,然后每条记录分别是id等于1,2,3,4,5的时候,类似in (集合)

select * from tb_user where id in (1,2,3,4,5);

find_in_set()和like的区别

在mysql中,我们在做数据查询时,需要得到某字段中包含某个值的记录,我们时常会用like来处理,但like也有局限,使用like可能查到我们达不到我们的预期,而find_in_set()函数在某些方面它比like更精准。

下面来看一个例子

创建表并插入语句:

CREATE TABLE `tb_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(50) NOT NULL COMMENT '用户姓名',
`roles` varchar(100) NOT NULL COMMENT '用户角色',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO tb_user(user_name, roles) VALUES('小爱','1,2,3,8,88');
INSERT INTO tb_user(user_name, roles) VALUES('小洪','1,108');
INSERT INTO tb_user(user_name, roles) VALUES('测试','2,108');
INSERT INTO tb_user(user_name, roles) VALUES('peng','100,101');

其中roles表示用户所拥有的角色(以英文逗号分隔),现在想查询拥有角色编号为8的用户,如果用like关键字的话,则查询结果如下:

SELECT * FROM tb_user WHERE roles LIKE '%8%';

细心的你会发现,小洪这个用户不具有角色'8',但也查出来了,这明显不符合我们的预期。下面我们用mysql 函数find_in_set()来查看。

SELECT * FROM tb_user WHERE FIND_IN_SET(8,roles);

从查询结果看,符合我们的预期。

注意:mysql字符串函数 find_in_set(str1,str2)函数是返回str2中str1所在的位置索引,str2必须以英文逗号","分割开。

总结

like是模糊匹配,字符串中没有分隔符,Find_IN_SET 是精确匹配,字段值以英文”,”分隔,Find_IN_SET查询的结果要小于like查询的结果。

文章使用的mysql版本 5.7。

由于笔者水平有限,文中纰漏之处在所难免,权当抛砖引玉,不妥之处,请大家批评指正。

-END-

精选推荐

终于知道阿里字节这样的大公司,为什么面试时经常拿final来考验求职者了

为什么那么多女孩子找对象喜欢找程序员?

更多精彩,请扫二维码

小爱微信: iyiyouyou

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql中find_in_set()函数的使用 的相关文章

  • C++线程

    1 创建线程 span class token macro property span class token directive hash span span class token directive keyword include s
  • OpenGPT的11种高效用法

    1 问答提示 2 解释复杂的概念 3 创作 创作需要尽可能的缩小范围 xff0c 提出具体的要求 xff0c AI会给出更好的答案 4 准备面试 5 教师教案 6 编码和集成 7 健身 8 送礼推荐 9 翻译 这个甚至不用去演示 xff0c
  • 浅析鹅鸭杀中服务端的技术实现和要点

    在朋友的介绍下 xff0c 我下载了这款游戏 由于之前玩过 Among Us xff0c 我本以为这款游戏不会达到正宗的太空狼人杀的水平 xff08 毕竟是免费的 xff09 但实际游玩后 xff0c 我被它更加丰富的设定和玩法所吸引 接下
  • nginx代理静态网站css解析异常

    今天在使用ecs进行部署网页时 xff0c 出现了一个问题 使用nginx代理到页面index html路径下 xff0c 同路径的资源都可以加载到 xff0c 但是却无法正确加载到页面样式 打开f12 xff0c 网络和控制台都没有资源异
  • 为什么mysql的delete操作不释放磁盘空间

    在 InnoDB 中 xff0c delete 操作并不会真的删除数据 xff0c mysql 实际上只是给要删除的数据打了标记 xff0c 标记为删除 磁盘所占空间不会变小 xff0c 即表空间并没有真正被释放 一 MySQL 删除数据几
  • docker start :FAIL Hypervisor framework fails

    mac 上启动 Docker 提示 FAIL Hypervisor framework fails 提示环境变量出错 我这台 mac 是自己攒的生产力 xff0c 由于软件是直接从旧的 mac 上迁移过来的 xff0c 我怀疑可能是系统版本
  • 在google设置静态页面 CDN加速

    一 创建bucket xff0c 设置bucket 链接 xff1a https console cloud google com storage browser 创建bucket 设置bucket公开访问 在bucket列表中 xff0c
  • Google Cloud Storage CORS跨域允许,忽略访问控制来源标头

    google storage origin https xxx com has been blocked by CORS policy No Access Control Allow Origin header is present on
  • 聊天记录存储实践

    公司的某款游戏在1月初接入微软小冰AI聊天功能 为了保存聊天记录并为后续的统计功能做好准备 xff0c 决定将聊天记录存放在服务端 最初并不清楚聊天数据量的大小以及玩家对聊天功能的使用情况 xff0c 所以采用了价格和性能相对宽容的MySQ
  • 将本地服务通过ssh代理给外部访问(如何使用 ssh 将本地服务代理给外部访问并保持 SSH 会话的连接性)

    如何使用 ssh 将本地服务代理给外部访问并保持 SSH 会话的连接性 1 外部服务器 nginx 配置 server span class token punctuation span listen localhost 80 span c
  • Go 单元测试高效实践

    敏捷开发中有一个广为人知的开发方法就是 XP xff08 极限编程 xff09 xff0c XP 提倡测试先行 xff0c 为了将以后出现 bug 的几率降到最低 xff0c 这一点与近些年流行的 TDD xff08 测试驱动开发 xff0
  • 操作系统—分段与分页

    1 地址重定位 所谓的地址重定位 xff08 也叫地址翻译 xff09 就是修改程序中的内存地址 xff0c 使得程序被载入内存后 xff0c 那些地址能够指向正确的内存空间 例如 xff0c 程序中包含 call 40 语句 xff0c
  • putty连接被拒的原因分析

    1 xff1a 检查防火墙 2 xff1a PING虚拟机 3 xff1a SSHD etc init d sshd start开启服务 4 xff1a IP字段问题 ifconfig eth0 新IP xff08 更改为字段和主机一样的I
  • Charles+Postern抓包遇到的问题(已解决)

    问题描述 Charles的代理配置和Postern的代理配置的都是正确的 xff0c 但是当在手机上打开Postern中的开启VPN时 xff0c Charles上没有任何反应 解决方法 xff1a 我在多次配置实验无果的情况下 xff08
  • 4. ROS编程入门--PID控制器

    介绍 xff1a 这篇教程是交给大家怎么在ROS里写一个PID控制器 xff0c PID控制器有三部分 比例部分 xff08 P xff09 积分部分 xff08 I xff09 微分部分 xff08 D xff09 PID的输出是这三部分
  • 6. ROS编程入门--路径跟随(Trajectory following)

    Task 本次实验才采用 Follow the carrot 算法去跟随定义好的路径 控制的目标点在机器人行走的路径上 xff0c 距离机器人是个常数距离 机器人计算自己的方向角和目标点角度之间的相差度数 控制这个差角为0 为了在探测时候能
  • 位姿矩阵求逆

    位姿矩阵求逆 位姿矩阵分析位姿矩阵求逆矩阵 为了更好的说明问题 xff0c 我们先来看一下位姿矩阵的定义 位姿矩阵分析 如下图所示 xff1a 如果在B坐标系下有一点PB xff0c 我们需要知道该点在坐标系A下的坐标PA xff0c 怎么
  • UNIX环境高级编程

    环境配置 1 下载apue 3e文件夹 xff0c 可以通过http www apuebook com code3e html现在源码 2 解压后执行进入apue 3e中执行make指令 如果出现 96 96 96 collect2 err
  • C#连接SQL Server 数据库

    C 是如何跟SQL Server进行连接的 xff1f 在C NET程序设计中 xff0c 离不开ADO NET ADO NET是 NET连接数据库的重要组件 使用其可以很方便地访问数据库 xff0c ADO NET还可以访问Oracle数
  • 冒烟测试和回归测试的区别

    每次新的版本出来的时候 xff0c 老大就让我们 冒烟 虽然不知道冒烟测试的含义 xff0c 但由于没有给用例 xff0c 我就随便跑跑 跑完冒烟后 xff0c 老大就让做 回归测试 xff0c 把bug回归掉 但是其实对2个概念还是不太理

随机推荐

  • Webpack——02——打包html资源

    1 在src中创建webpack的入口文件index js xff0c index html 2 src的同级目录下创建webpack config js 3 下载插件html webpack plugin 老规矩 初始化 xff0c 下w
  • AT&T 汇编

    1 基础 x86 的寄存器为32位 xff0c x64 的寄存器为64位 寄存器间对应关系 xff1a 64位寄存器 低32位 低16位 低8位 rax eax ax al rbx ebx bx bl rcx ecx cx cl rdx e
  • 向导对话框[转]

    很久以前在网上看到的一片文章 xff0c 忘了是谁写的了 xff0c 觉得很好 xff0c 所以在这里转载 首先要了解的是CPropertySheet实际上是由一个TabCtrl加多个Page和多个按钮组成 这里强调一点 xff0c DoM
  • win10用pip安装face_recognize

    1 安装CMake 命令 xff1a pip install CMake 2 安装face recognition xff08 也可先安装dlib xff09 命令 xff1a pip install face recognition 查看
  • VS2019配置SFML

    VS2019配置SFML 1 下载安装SFML SDK 网址 xff1a https www sfml dev org download php 解压并放在文件夹里 xff0c 记住这个路径 在我的电脑中这个路径是F C 43 43 Pro
  • django学习笔记

    未更新完成 文章目录 一 什么是django1 1 有关django1 1 1 开始1 1 2 MVC框架 设计模式1 1 3 Django架构 MTV模型 1 2 安装配置开始django1 2 1 python和django1 2 2
  • 战略性放弃日记

    文章目录 20216 26 2021 6 26 在win10中部署linux子系统ubuntu时 xff0c 安装WSL图形界面遇到报错 ccsm命令后 xff0c 报错 NoneType object has no attribute g
  • docker安装linux-ubuntu桌面环境

    操作系统 xff1a win10 docker版本 xff1a 20 10 7 xff08 可通过docker version确认 xff09 在cmd或window power shell中输入命令 1 拉取镜像 docker pull
  • Cent OS7下载和安装图形桌面教程

    具体安装教程 下载地址 xff1a https www centos org download 1 进入官网 xff0c 找到下载 xff0c 下面三个ios镜像都可以选择 2 使用链接下载cent os ios centos7安装GUI图
  • Udacity 深度学习项目2(Project2) Image Classification 解析

    本项目需要搭建一个简单的卷积神经网络 xff08 CNN xff09 来对 CIFAR 10 数据进行图片分类 本文记录了这个项目的一些注意事项 xff11 数据的预处理 xff1a 对于CIFAR 10 的图片数据 xff0c 首先要做归
  • 网络程序设计——VC的多线程编程(线程与进程)

    目录 一 线程与进程 1 线程 2 引用线程的原因 3 线程与进程的关系 4 线程的特点 二 线程函数的参数传递 三 多线程与单线程的区别 四 线程创建函数 beginthread 和 beginthreadex 五 终止线程函数 一 线程
  • linux apt-get autoremove千万别乱用

    使用linux下的apt get autoremove命令的心得体会 前几天在实验室搭建要做人工智能项目的环境时 xff0c 由于未解决python2 7和python3 6共存时 xff0c 只利用python2 7版本的库文件 xff0
  • 嵌入式培训经验分享——网络编程项目实战(在线电子词典)

    在线电子词典采用服务器 43 客户端模式 xff0c 运用TCP协议通信 xff0c xff0c 服务器端直接连接数据库 1 服务器实现 功能 注册设计 如果用户没有注册 必须注册才能提供服务 包括修改用户名密码 xff08 1 xff09
  • MySQL事务

    1 事务性质 原子性 xff08 Atomicity xff09 xff1a 一个事务中的所有操作 xff0c 要么全部完成 xff0c 要么全部不完成 xff0c 不会结束在中间某个环节 一致性 xff08 Consistency xff
  • ROS中D435i的安装使用

    目录 D435i 安装ROS接口安装使用 Python接口安装opencv安装 xff08 相机标定 使用的依赖 xff09 D435i标定安装依赖标定发生的错误 D435i使用使用find object 2d检测2D物体 xff08 平面
  • win10远程桌面登录虚拟机Ubuntu

    在公司实习没事干 xff0c 想着折腾一下虚拟机 xff0c 于是用Windows win10 下的mstsc登陆一下虚拟机上的Ubuntu 14 04 桌面环境 顺便区别一下一般用telnet远程连接和使用桌面共享连接的区别 xff1a
  • octet和byte的差异

    在不严谨的前提下 xff0c byte和octet都表示为8 bits xff0c 但是严格意义上来讲 xff0c octet才是严格意义上的8 bits xff0c 而历史上的byte其实可以表示为4 bits 10 bits xff0c
  • 算法移植到STM32单片机中会遇到的一些问题

    最近完成了一些算法 xff0c 需要移植到STM32F4系列的板子上用作实际工程 xff0c 其中遇到了许多的问题 xff0c 下面记录一些调试bug的经验记录 1 编译没有问题 xff0c 但是调试运行时却会进入到某一函数无法运行 xff
  • 由chmod改系统文件权限引ssh登录报ssh_exchange_identification: read: Connection reset by peer无法登陆问题

    root用户下在给某个文件夹下的所有文件改权限的时候 xff0c 用了chmod R 命令 xff0c 咋一看这个命令没啥很正常 xff0c 也能执行 xff0c 但是后面的提示让人感觉很不对劲 xff0c 因为yang下文件没这么多 xf
  • mysql中find_in_set()函数的使用

    在做电商项目时 xff0c 不知你有没有遇到这样的一种情况 xff0c mysql数据库中商品表tb product里面有个字段type xff0c 它存储的是商品类型 xff0c 比如 1 xff1a 热门推荐2 xff1a 精选推荐3