我对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那么多)
答案 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,%"'
));