首先,我删除了这一部分:
$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);
}
}
}
谢谢大家的回答,并帮助我找到解决方案。