php – 使用大型数据库时,Ajax请求需要很长时间才能完成

我正在使用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();
    }
}

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...