数据库里有个varchar字段somecol,保存的数据为数字列表,用逗号分割,如1,2,3。
现在在查询条件里用到IN,如传入参数$a,要判断$a是否IN somecol,发现写condition的时候直接写成WHERE $a IN (somecol)没办法查出数据,直接运行sql语句是可以查出结果的。
有人知道是怎么回事吗?
数据库里有个varchar字段somecol,保存的数据为数字列表,用逗号分割,如1,2,3。
现在在查询条件里用到IN,如传入参数$a,要判断$a是否IN somecol,发现写condition的时候直接写成WHERE $a IN (somecol)没办法查出数据,直接运行sql语句是可以查出结果的。
有人知道是怎么回事吗?
转成数组在 addIn…
再补充下楼上的
//把取出的数据转为数组
$somecol=explode(',',$model->somecol);
//然后再构造addInCondition
....
楼上说的没错!
比如传入$a = 2,现在要查找数据库somecol里所有包含有2的数据,照上面的说法来实现也很没效率吧?
还不如把所有数据遍历一次,判断somecol里是否包含2就行了。
我想知道能不能通过查询一次性把数据查出来
像楼主的情况,根本不能用WHERE $a IN (somecol),好像逻辑反了。
想想我也觉得好像有点不妥,不过用navicat执行sql语句却是可以返回正确结果的,所以有点困惑
你可以这样写,用字符串函数 INSTR(str,substr) 如果在里面,则大于0否则小于0