Php Yii动态下拉列表-昂贵的查询

Php Yii动态下拉列表-昂贵的查询,php,mysql,drop-down-menu,yii,Php,Mysql,Drop Down Menu,Yii,我有一个Yii下拉列表,它加载了一个城市、州、Zipcode、lat和lon的表格。加载“状态”下拉列表时,需要花费很长时间。有没有办法加快查询速度以缩短页面加载时间?我已经包括了我的观点: echo $form->dropDownList($model,'State', CHtml::listData(Zipcodes::model()->findAll(), 'State', 'State', 'State'), array('empty'=>'-- Choose Stat

我有一个Yii下拉列表,它加载了一个城市、州、Zipcode、lat和lon的表格。加载“状态”下拉列表时,需要花费很长时间。有没有办法加快查询速度以缩短页面加载时间?我已经包括了我的观点:

echo $form->dropDownList($model,'State', CHtml::listData(Zipcodes::model()->findAll(),
'State', 'State', 'State'), array('empty'=>'-- Choose State --'));

该表有41000个条目。在listData()中设置$groupField似乎没有带来任何明显的改进。

不加载41k个条目并将它们放入HTML
标记中似乎是一个非常好的开始…:-)


使用AJAX只加载您需要的内容。

不加载41k条目的内容并将其放入HTML
标记中似乎是一个非常好的开始…:-)


使用AJAX只加载您需要的状态。

状态下拉列表是否从该表中剔除唯一的状态,即,您最终得到50个ish结果?您可能希望手动构造查询并查看瓶颈在哪里。对于复杂的查询,这通常比使用AR快得多,我假设您正在使用AR创建模型。我还假设您没有尝试将41k条记录加载到下拉列表中


我们可能需要更多关于表的结构、如何创建模型等的详细信息。

状态下拉列表是否从该表中剔除唯一的状态,即最终得到50个ish结果?您可能希望手动构造查询并查看瓶颈在哪里。对于复杂的查询,这通常比使用AR快得多,我假设您正在使用AR创建模型。我还假设您没有尝试将41k条记录加载到下拉列表中


我们可能需要更多关于表格结构、如何创建模型等的详细信息。

我认为有两种方法:

1) 使用缓存(有很长或没有过期时间,因为您拥有的数据不是动态的)。 第一次加载时,加载时间不会改变,但在那之后,加载速度会大大加快,因为缓存已经被保存。

  • 使用缓存,您需要编辑config/main.php文件

2)可以考虑尝试<强> CJuAutoOfgult>


它只会在键入和匹配您感兴趣的数据时给出结果。

我认为您可以有两种方法:

1) 使用缓存(有很长或没有过期时间,因为您拥有的数据不是动态的)。 第一次加载时,加载时间不会改变,但在那之后,加载速度会大大加快,因为缓存已经被保存。

  • 使用缓存,您需要编辑config/main.php文件

2)可以考虑尝试<强> CJuAutoOfgult>


它只会在键入和匹配您感兴趣的数据时提供结果。

使用CDbCriteria,我为查询设置了“分组依据”:

$stateGroupBy = new CDbCriteria; // i got that bitch criteria. bitches love criteria!
$stateGroupBy->group = 'State'; // group by state
echo $form->dropDownList($model, 'State', CHtml::listData(Zipcodes::model()->findAll($stateGroupBy), 'State', 'State'), 
        array('ajax' => 
            array(
                  'type'=>'POST', //request type
                  'url'=>CController::createUrl('search/dynamiccities'), #we don't have to use search/, we could just say dynamiccities
                  'update'=>'#Zipcodes_City',
                  /*'data'=>'js:jQuery(this).serialize()'*/
                  ),
            'empty'=>'-- Choose State --')
        );

回到这里,我精疲力竭,但这大大减少了工作量。

使用CDbCriteria,我为查询设置了“分组依据”:

$stateGroupBy = new CDbCriteria; // i got that bitch criteria. bitches love criteria!
$stateGroupBy->group = 'State'; // group by state
echo $form->dropDownList($model, 'State', CHtml::listData(Zipcodes::model()->findAll($stateGroupBy), 'State', 'State'), 
        array('ajax' => 
            array(
                  'type'=>'POST', //request type
                  'url'=>CController::createUrl('search/dynamiccities'), #we don't have to use search/, we could just say dynamiccities
                  'update'=>'#Zipcodes_City',
                  /*'data'=>'js:jQuery(this).serialize()'*/
                  ),
            'empty'=>'-- Choose State --')
        );
回到这里,我筋疲力尽,但这大大减少了工作量

$stateGroupBy = new CDbCriteria; // i got that bitch criteria. bitches love criteria!
$stateGroupBy->group = 'State'; // group by state
echo $form->dropDownList($model, 'State', CHtml::listData(Zipcodes::model()->findAll($stateGroupBy), 'State', 'State'), 
        array('ajax' => 
            array(
                  'type'=>'POST', //request type
                  'url'=>CController::createUrl('search/dynamiccities'), #we don't have to use search/, we could just say dynamiccities
                  'update'=>'#Zipcodes_City',
                  /*'data'=>'js:jQuery(this).serialize()'*/
                  ),
            'empty'=>'-- Choose State --')
        );