您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

PHP比较列值并相应地编辑数据库

PHP比较列值并相应地编辑数据库

因此,我通过提出另一种方法独自解决了自己的问题。

首先,我删除了这一部分:

$current = $row['score'];
    $index = $result['user_id']

    if ($current == $prevIoUs) {
        $update = "UPDATE names SET tied=0 WHERE user_id=$index";
        $conn->query($update);
    }
    $prevIoUs = $current;

prevIoUs变量。

我的新方法将整个表保存在一个新数组中,使用该array_count_values()方法获取重复的值,使用该方法继续获取键,array_keys()并通过SQL查询更新数据库

这是更改部分的代码

// sql Query
$sql = "SELECT * FROM names ORDER BY score DESC";
$result = $conn->query("$sql");

$query = "SELECT * FROM names ORDER BY score DESC";
$sol = $conn->query("$query");

// initalizing of variables
$count = 1;
$data = array();

// inputs table into an array
while($rows = MysqLi_fetch_array($sol)) {
    $data[$rows['user_id']] = $rows['score'];
}

// -- Tied Column Sort --

// counts duplicates
$cnt_array = array_count_values($data);

// sets true (1) or false (0) in helper-array ($dup)
$dup = array();
foreach($cnt_array as $key=>$val){
   if($val == 1){
      $dup[$key] = 0;
   }
   else{
      $dup[$key] = 1;
   }
}

// gets keys of duplicates (array_keys()) and updates database accordingly ($update query)
foreach($dup as $key => $val){
    if ($val == 1) {
        $temp = array_keys($data, $key);

        foreach($temp as $k => $v){
            $update = "UPDATE names SET tied=1 WHERE user_id=$v";
            $conn->query($update);
        }
    } else{
        $temp = array_keys($data, $k);

        foreach($temp as $k => $v){
            $update = "UPDATE names SET tied=0 WHERE user_id=$v";
            $conn->query($update);
        }
    }
}

谢谢大家的回答,并帮助我找到解决方案。

php 2022/1/1 18:53:10 有451人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶