本文主要是介绍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()的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!