有时候设计数据表的时候会为了减少表的数量,而把一些相关的id通过逗号连接起来并保存,但是会增加更新的难度和查找难度!
首先我尝试使用like模糊搜索,始终是效率会比较低,最后找到了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。 这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。
用户权限字段:power 内容:1,2,3,4,5 站长教学网 eduyo.com
select * from user where find_in_set('1',power)>0;
把拥有1权限的用户查询出来
效率上我没对比过,直观上认为like模糊查询的效率最低。
(责任编辑:ken)