有没有办法检查指定的条件是否成功。我正在尝试计算匹配的标准数量并相应地对结果进行排名。
$criteria->compare('users.id', $id);
如果上述条件产生匹配,请执行rank++
。
我发现上面的语句会返回criteria
对象本身。所以,我真的很困惑找到一种方法来做到这一点。
非常感谢您的帮助。感谢。
修改
$count=YourModel::model()->countByAttributes(array('user_id'=>$id));
给出了匹配的总行数。我想确定哪个特定行匹配并对该行进行排名并根据排名对结果进行排序。
答案 0 :(得分:1)
实际上CDbCriteria
只是搜索的标准。这不是数据检索器。它只是设定了条件。要检索数据,您需要使用CActiveDataProvider
或ActiveRecord
我不知道你想在上面的代码上使用哪个,但我建议使用以下代码
$count=YourModel::model()->countByAttributes(array('user_id'=>$id));
或者如果您使用的是CActiveDataProvider
,那么
$dataProvider=new CActiveDataProvider('YourModel',array(
'criteria'=>$yourCriteria
));
$count=$dataProvider->totalItemCount;
修改强>
我想确定哪个特定行匹配并对该行进行排名 并根据排名对结果进行排序。
参考您的上述问题。实际上,您无法使用它来识别该行。 Mysql
允许Triggers
,但您只能将其用于INSERT,DELETE,UPDATE
之类的语句。因此,如果要修改数据库,则需要检索符合条件的所有行。将它们放在foreach循环中,对它们进行排名并保存模型。
$models=YourModel::model()->findAll($yourCriteria);
if(isset($models))
{
foreach($models as $model)
{
$model->rank=i;
$model->save();
i++;//rank number
}
}