Yii CDbCriteria获取列中具有相同字符的所有记录

时间:2014-06-25 20:07:13

标签: yii

我对sql不太满意,我正在为列表中显示的列中选定ID的所有记录制作CListView ..只是为了练习,我想添加一个下拉列表选择另一种排序(id DESC已经存在)。

我有一个包含列的表:id,Name,Project_id,User_id,Assigned等...

现在这是我的代码:

public function actionView($id)
    {
        $model = $this->loadModel($id);

        $criteria = new CDbCriteria(array(
            'order'=>'id desc',
            'condition'=>'Project_id='.$id
        ));

        $dataProvider = new CActiveDataProvider('Task', array(
            'criteria'=>$criteria
        ));

        $this->layout = 'column2';

        $this->render('view', array('model'=>$model, 'dataProvider'=>$dataProvider));
    }

我选择了所有具有所请求的project_id的记录,因此我想要做的事情(我不知道该怎么做)是在列上添加另一个标准选择"分配"问题是,这些记录中的一些记录有超过1个单独分配,并且被保存为" 1,2,5,6"。因此,如果我添加另一个分配了1的选项,它将只显示已分配的记录" 1"而不是那些有" 1,3,5,6" ..我正在考虑对字符串进行搜索,但我不知道它是如何在sql上运行的(因为我不太了解SQL那么多)

2 个答案:

答案 0 :(得分:0)

试试这个 -

$criteria = new CDbCriteria(array(
    'order'=>'id desc',
    'condition'=>'Project_id='.$id.' AND find_in_set($assigned, Project_id)'
));

但此处$assigned只能包含单个值,即$assigned = 1$assigned = 2

如果$assigned = "1,2"其中1,2本身将被视为单个值,那么只有当表格中的模式为1,2..而不是2,1,...时,才会返回结果

我希望它能给出一些想法。

答案 1 :(得分:0)

发现我的解决方案..似乎我使用SQLite而SQLite不支持find_in_set()。我必须使用(',' || Assigned ||',')LIKE'%,1,%'。喜欢这个..

$criteria = new CDbCriteria(array(
            'order'=>'id desc',
            'condition'=>'Project_id='.$id.' AND ("," || Assigned || ",") LIKE "%,5,%"'
        ));