php - 更新多行 Mysql PHP 需要很长时间并且崩溃

标签 php mysql mysqli updates

<分区>

我想在用户单击提交按钮时更新数千行,我的函数使用另一个函数来计算我要更新的字段。 我的问题是,当我尝试更新 5 行或 10 行之类的几行时,它工作正常,但是当我有 20 行或更多行时,执行代码需要很长时间,或者有时,它会显示很多我不知道的错误没有。 所以任何人都可以帮助我!

我的代码:

//----database connection
/* DATABASE CONFIGURATION */
define('DB_SERVER', 'localhost');
define('DB_PORT', '8090');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_DATABASE', 'db_qvt');

function getDB(){
    $dbhost=DB_SERVER;
    $dbport=DB_PORT;
    $dbuser=DB_USERNAME;
    $dbpass=DB_PASSWORD;
    $dbname=DB_DATABASE;
    // Check connection
    $dbConnection = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
    mysqli_set_charset($dbConnection, "utf8");
     return $dbConnection;
}

//------------ update user final score--------------//
function update_user_final_score($login, $pass_user, $final_score){

  $sql_update="update users_answers set score_final = '$final_score' where login = '$login' and pass_user = '$pass_user'";
  $res = mysqli_query(getDB(), $sql_update);
  return $res;
}

//------------ calculate all users final scores--------------//
function update_all_users_final_score($login){
  $users_client = get_users_answers($login);
  for($i=0;$i<sizeof($users_client);$i++){
    update_user_final_score($users_client[$i]['login'], $users_client[$i]['pass_user'], calculate_user_final_score($users_client[$i]['login'], $users_client[$i]['pass_user']));
  }
}
//-- call the function
update_all_users_final_score($login);

最佳答案

您正在使用循环遍历客户端。这意味着对于每个客户端,您都运行一个单独的 SQL 查询。

我相信你应该像这样创建一个 SQL 语句:

UPDATE users_answers
SET score_final = (case when login = 'X' then '1'
                        when login = 'Y' then '2'
                        when login = 'Z' then '3'
end);

这样一来,您只需运行一个查询,这比运行多个查询要快得多。

创建具有多个案例的查询的最简单方法是遍历客户端数组,并将案例 ['when login="whatever"then "calculated_score"'] 添加到 SQL 语句字符串,然后传递 SQL 命令字符串到你的 mysql 服务器。

关于php - 更新多行 Mysql PHP 需要很长时间并且崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55846144/

相关文章:

php - 具有多个ID的Mysql选择查询

MySQL 统计具有不同 IP 地址的用户代理

php - 选择语句无法正常工作

PHP 购物篮问题

PHP调用树对象

javascript - WordPress 中的 BXSlider

mysql - 在插入期间将自动递增的值复制到其他列

php - 保护客户端处理的数据库 key

php - 安全 $_GET 和 mysql 使用?

php - 从数据库获取数据时数组的问题