php – 使用大型数据库时,Ajax请求需要很长时间才能完成
发布时间:2020-12-13 22:23:52 所属栏目:PHP教程 来源:网络整理
导读:我正在使用Yii框架(版本1.1.14)编写的网站,该网站允许上传和显示新闻.网站的管理员可以选择三个新闻来推广到主页并指定它们的显示顺序.我正在使用Mysql数据库.新闻表有两个字段:isChecked(0或1)和homepagePos(整数)以及其他字段. isChecked字段确定是否选择
我正在使用Yii框架(版本1.1.14)编写的网站,该网站允许上传和显示新闻.网站的管理员可以选择三个新闻来推广到主页并指定它们的显示顺序.我正在使用Mysql数据库.新闻表有两个字段:isChecked(0或1)和homepagePos(整数)以及其他字段. isChecked字段确定是否选择了新闻以在主页中显示,并且homepagePos字段确定新闻的显示顺序.我使用了
jquery的可排序插件来对新闻进行排序.当用户选择要显示的新闻并单击“保存”按钮时,新闻ID将通过ajax发送到php.
将值发送到新闻控制器的javascript部分如下: $(document).on('click','#saveToHomepage',function() { var url = ajaxRequestSendUrl; //ajaxRequestSendUrl contains url to news controller's promote to homepage method. $.ajax({ method: "GET",url: url,data: { contentIds: contentIds,//contentIds contains an array of news Ids in certain order },success: function() { // Show success message },error: function() { alert('Some error occured. Please reload the page and try again.'); } }); }); 这是新闻控制器中的主页推广方法: public function actionHomepage() { $allNews = News::model()->findAll(); $value = $_GET['contentIds']; foreach ($allNews as $news) { if($news->id == $value[0] ||$news->id == $value[1] ||$news->id == $value[2]) { $news->isChecked = 1; $news->homepagePos = array_search($news->id,$value); //Assign index of the array as the position $news->save(); } else { $news->isChecked = 0; $news->homepagePos = -1; $news->save(); } } } 我的问题是我的新闻表有超过2k的数据.所以ajax调用需要很长时间(超过一分钟)才能完成.有什么方法可以优化代码,还是有其他方法可以解决这个问题,以减少完成此操作所需的时间? 解决方法
三个查询:首先将整个表设置为未检查状态,其余为仅在每个选中的行中设置检查状态
public function actionHomepage() { $values = $_GET['contentIds']; $sql = "UPDATE news SET idChecked=0,homepagePos = -1"; Yii::app()->db ->createCommand($sql) ->execute(); for($ii = 0; $ii < 3; $ii++) { $sql = "UPDATE news SET idChecked = 1,homepagePos = ':homepagePos' WHERE id=:id"; Yii::app()->db ->createCommand($sql) ->bindValues(array(':homepagePos' => array_search($ii,$values),':id' => $values[$ii])) ->execute(); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |