thinkphp5.1使用FIND_IN_SET方法查询以逗号间隔的数据

数据格式

数据表中有个字段存的是以逗号分割的分类ID数据,比如: 1,2,3,4,5
需要找出某个分类下的数据列表,即字段值中含有对应的分类ID,比如 2

MySQL 原生语句

SELECT * FROM `frame_ask` WHERE FIND_IN_SET (18, c_id); 

thinkphp5.1 以表达式快捷方法查询

$AskModel->whereExp('', 'FIND_IN_SET(:cid, c_id)', ['cid'=>$cid])->select();

thinkphp5.1 数组查询方法

$where = [
            ['status', '=', 1],
            ['is_del', '=', 0]
        ];
$cid = 2;
$where[] = ['', 'exp', Db::raw("FIND_IN_SET($cid, c_id)")];
$AskModel->where($where)->select();

最终生成的SQL语句

SELECT * FROM `frame_ask` WHERE  `status` = 1  AND `is_del` = 0  AND (  FIND_IN_SET(18, c_id) )

发表评论