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

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了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();
    }
}

脚本宝典总结

以上是脚本宝典为你收集整理的php – 使用大型数据库时,Ajax请求需要很长时间才能完成全部内容,希望文章能够帮你解决php – 使用大型数据库时,Ajax请求需要很长时间才能完成所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。