MySQL如何使用某个表中的字段与字符串(使用逗号拼接)集合相匹配 FIND_IN_SET()

本文主要是介绍MySQL如何使用某个表中的字段与字符串(使用逗号拼接)集合相匹配 FIND_IN_SET(),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 知识点: 

 FIND_IN_SET()函数用于在一个逗号分隔的字符串列表中查找一个值的位置。它的语法如下:

FIND_IN_SET(要查找的值, 逗号分隔的字符串列表)

 例如,有一个逗号分隔的字符串列表 "apple,banana,orange",我们想要查找 "banana" 在这个列表中的位置,可以使用以下查询:

SELECT FIND_IN_SET('banana', 'apple,banana,orange');

 

应用条件:

根据表关系可以看出,当我们想通过角色id获取到权限id的相关信息:
 

 

 书写SQL:

-- 根据角色id获得权限id
select ps_ids from sp_role ro where  role_id = 31;

获得的权限id值: 

 按照正常思路来说,我们可以通过查询的ids,通过与id进行匹对,获取权限的详细信息:

-- 根据权限id获得权限的详细信息
select * from sp_permission where ps_id in (select ps_ids from sp_role ro where  role_id = 31);

尝试后发现:

按照刚刚查询的结果,包含很多权限,但是目前只查到一个权限,显然是不对的:

进行调试分析:

select * from sp_permission where ps_id in (105,116,117,142,143,121,122,123,149,129,134,138,112,147,101,104,115,103,111);

 查询结果:

相比一定是解析出错了,一般情况下,都是字符串和数字匹配有误,或者是当初逻辑运算的问题,

现在将子查询当成字符串处理:

SELECT * FROM sp_permission WHERE FIND_IN_SET(ps_id, '105,116,117,142,143,121,122,123,149,129,134,138,112,147,101,104,115,103,111');

将字符串更换为子查询: 

SELECT perm.* FROM sp_permission perm WHERE FIND_IN_SET(perm.ps_id,(select ro.ps_ids from sp_role ro where role_id = 31));


 

成功获得属性!!!

 

这篇关于MySQL如何使用某个表中的字段与字符串(使用逗号拼接)集合相匹配 FIND_IN_SET()的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/920773

相关文章

9个SpringBoot中的自带实用过滤器使用详解

《9个SpringBoot中的自带实用过滤器使用详解》在SpringBoot应用中,过滤器(Filter)是处理HTTP请求和响应的重要组件,SpringBoot自带了许多实用的过滤器,如字符编码,跨... 目录1. CharacterEncodingFilter - 字符编码过滤器功能和配置手动配置示例2

Redis持久化机制之RDB与AOF的使用

《Redis持久化机制之RDB与AOF的使用》:本文主要介绍Redis持久化机制之RDB与AOF的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis持久化机制-RDB与AOF一、RDB持久化机制1、RDB简介2、RDB的工作原理3、RDB的优缺点4

MySQL索引失效问题及解决方案

《MySQL索引失效问题及解决方案》:本文主要介绍MySQL索引失效问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql索引失效一、概要二、常见的导致MpythonySQL索引失效的原因三、如何诊断MySQL索引失效四、如何解决MySQL索引失

使用Python实现实时金价监控并自动提醒功能

《使用Python实现实时金价监控并自动提醒功能》在日常投资中,很多朋友喜欢在一些平台买点黄金,低买高卖赚点小差价,但黄金价格实时波动频繁,总是盯着手机太累了,于是我用Python写了一个实时金价监控... 目录工具能干啥?手把手教你用1、先装好这些"食材"2、代码实现讲解1. 用户输入参数2. 设置无头浏

Spring Boot 常用注解详解与使用最佳实践建议

《SpringBoot常用注解详解与使用最佳实践建议》:本文主要介绍SpringBoot常用注解详解与使用最佳实践建议,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、核心启动注解1. @SpringBootApplication2. @EnableAutoConfi

mysql递归查询语法WITH RECURSIVE的使用

《mysql递归查询语法WITHRECURSIVE的使用》本文主要介绍了mysql递归查询语法WITHRECURSIVE的使用,WITHRECURSIVE用于执行递归查询,特别适合处理层级结构或递归... 目录基本语法结构:关键部分解析:递归查询的工作流程:示例:员工与经理的层级关系解释:示例:树形结构的数

Redis中RedisSearch使用及应用场景

《Redis中RedisSearch使用及应用场景》RedisSearch是一个强大的全文搜索和索引模块,可以为Redis添加高效的搜索功能,下面就来介绍一下RedisSearch使用及应用场景,感兴... 目录1. RedisSearch的基本概念2. RedisSearch的核心功能(1) 创建索引(2

Redis中HyperLogLog的使用小结

《Redis中HyperLogLog的使用小结》Redis的HyperLogLog是一种概率性数据结构,用于统计唯一元素的数量(基数),本文主要介绍了Redis中HyperLogLog的使用小结,感兴... 目录 一、HyperlogLog 是什么?️ 二、使用方法1. 添加数据2. 查询基数China编程3.

SQL常用操作精华之复制表、跨库查询、删除重复数据

《SQL常用操作精华之复制表、跨库查询、删除重复数据》:本文主要介绍SQL常用操作精华之复制表、跨库查询、删除重复数据,这些SQL操作涵盖了数据库开发中最常用的技术点,包括表操作、数据查询、数据管... 目录SQL常用操作精华总结表结构与数据操作高级查询技巧SQL常用操作精华总结表结构与数据操作复制表结

查看MySQL数据库版本的四种方法

《查看MySQL数据库版本的四种方法》查看MySQL数据库的版本信息可以通过多种方法实现,包括使用命令行工具、SQL查询语句和图形化管理工具等,以下是详细的步骤和示例代码,需要的朋友可以参考下... 目录方法一:使用命令行工具1. 使用 mysql 命令示例:方法二:使用 mysqladmin 命令示例:方