YII查询不起作用

时间:2013-09-07 17:15:46

标签: php yii

我有一张大约有700,000行的表格。

Profile::model()->findAll("country='US'")

我用它来查找所有以'US'为国家的行。但执行停止了,我没有得到任何结果。但后来我添加限制如下

Profile::model()->findAll("country='US' limit 10000")

然后它奏效了。

执行停止的原因?请帮助我..我是YII的新手。

1 个答案:

答案 0 :(得分:2)

如果您使用findAll,则会返回所有记录而不应用任何限制。但是,如果您不另行说明,CActiveDataProvider会自动对结果进行分页。如评论中所述,使用findAll时可能会内存不足。使用限制或分页(自动应用限制)会将返回的行数降低到应用程序可以处理的行数。

我建议使用CDataProviderIterator来获取大量活动记录。请尝试以下示例代码。

$criteria = new CDbCriteria;
$criteria->compare('country','US');

$Profiles = CDataProviderIterator(
   new CActiveDataProvider(
     'Profile',
      array('criteria'=>$criteria)
   ),
   10000
 );

foreach ($Profiles as $Profile) {
  //do whatever
}

使用迭代器,Yii会一次自动获取10000条记录(一个你说工作的数字而不会耗尽内存),然后在抓取下一页之前将它们从内存中删除。方便地,可以使用foreach循环访问所有记录,而无需您进行任何进一步的工作。

根据需要更改10000值以获得所需结果。此外,请确保监视错误日志以识别内存不足和其他错误。

相关问题