在项目种经常会遇见以逗号或者其他符号拼接的id的方式保存数据,这样保存的方式在查询时,我们会用到find_in_set做查询,Yii2 当然也有实现的方法。
$tags = new Expression("FIND_IN_SET(:tags_{$tags}, tags)",[":tags_{$tags}"=>$tags]);
array_push($where,$tags);
======================================================================================================
2021-04-07
FIND_IN_SET 存在sql性能问题,数据量小可能提现不出来,当数量到了一定级别只有就出现,那这个问题其实还是有其他解决方案
1、采用二进制位一个标志位存储(1,3,7)
$myPrivilege = 7;
$pri = [];
$privilegeArr = [
1=>'查',
2=>'改',
4=>'删',
8=>'增'
];
foreach($privilegeArr as $k =>$v){
$myPrivilege & $k && $pri[] = $k;
}
2、如分类数据,id开始已1000或者10000开始存储,使用like 查询