我正在对数据库中的值执行排名练习。每列是一年,每列有76个值(即每年76行)。这些年份是从1980年到2035年。我的脚本必须依次遍历每年(列),并对值进行排名(即按升序排列,然后吐出相关的ID)。
我已经编写了下面的脚本,但是它可以工作,但是我认为它需要三秒钟才会很慢。对于第一列(1980),它很快,因为我可以一次插入它们。对于其他人,我不能,因为我需要更新表,因此匹配行 - 这导致每个值单独的SQL查询。
有更好的方法吗?这是我的代码:
for ($x = 1980; $x <= 2035; $x++) {
$sql="SELECT `ID`,`$x` FROM marginal_costs ORDER BY `$x`";
$concat = "";
$counter = 1;
$result = mysqli_query($con,$sql);
while($row = mysqli_fetch_array($result)) {
if($x==1980) {
$concat = $concat."('".$row['ID']."'), ";
} else {
$upload="UPDATE `merit_order` SET `$x`='".$row['ID']."' WHERE `ID`='$counter';";
echo $upload;
mysqli_query($con, $upload);
$counter= $counter + 1;
}
}
if($x==1980) {
$concat = substr_replace($concat, "", -2).";";
$upload="INSERT INTO `merit_order` (`$x`) VALUES $concat;";
mysqli_query($con, $upload);
}
}
答案 0 :(得分:1)
您的代码会向您的数据库发送大量SQL,从而产生不必要的通信。这是你可以优化的一件事......两个选择: