是否有任何方法可以检查指定的条件是否成功。我正在计算匹配的标准数量,并对结果进行相应的排名。
$criteria->compare('users.id', $id);
如果上述条件确实产生匹配,则执行rank++
。
我发现上面的语句返回了criteria
对象本身。所以,我真的很困惑,找不到一种方法来做到这一点。
将感谢您的帮助。谢谢
编辑
$count=YourModel::model()->countByAttributes(array('user_id'=>$id));
给我匹配的行总数。我想确定哪一行匹配,对该行进行排名,并根据排名对结果进行排序。
实际上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
}
}