关于CDbCriteria的疑问

数据库里有个varchar字段somecol,保存的数据为数字列表,用逗号分割,如1,2,3。

现在在查询条件里用到IN,如传入参数$a,要判断$a是否IN somecol,发现写condition的时候直接写成WHERE $a IN (somecol)没办法查出数据,直接运行sql语句是可以查出结果的。

有人知道是怎么回事吗?

转成数组在 addIn…

:unsure: 再补充下楼上的




//把取出的数据转为数组

$somecol=explode(',',$model->somecol);

//然后再构造addInCondition

....




楼上说的没错!

比如传入$a = 2,现在要查找数据库somecol里所有包含有2的数据,照上面的说法来实现也很没效率吧?

还不如把所有数据遍历一次,判断somecol里是否包含2就行了。

我想知道能不能通过查询一次性把数据查出来

像楼主的情况,根本不能用WHERE $a IN (somecol),好像逻辑反了。

想想我也觉得好像有点不妥,不过用navicat执行sql语句却是可以返回正确结果的,所以有点困惑

你可以这样写,用字符串函数 INSTR(str,substr) 如果在里面,则大于0否则小于0