Я выполняю упражнение ранжирования для значений в моей базе данных. Каждый столбец составляет год и каждый имеет 76 значений (т. Е. 76 строк под каждым годом). Годы с 1980 по 2035 год. Мой сценарий должен проходить каждый год (колонка) по очереди и ранжировать значения (т. Е. Упорядочивать их в порядке возрастания, а затем выплевывать связанные идентификаторы).Оценка значений столбцов в базе данных MySQL
Я написал сценарий ниже, и он работает, но это занимает три секунды, которые, я думаю, очень медленные. Для первого столбца (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);
}
}
Вы выполняете большой запрос в базе данных, это не странно, что он медленный O.o – Jordy
плюс наличие таких столбцов не очень хороший дизайн. почему не просто общая колонка «год»? Не рассматривайте БД так, как если бы это была электронная таблица. –
Я не благодарен за нижний план. То, как я это делаю, явно неэффективно, поскольку я выполняю смехотворное количество запросов вместо одного большого запроса. Должен быть лучший способ сделать это (возможно, построив массив). На данный момент это работает медленнее, чем скажем, сопоставимый скрипт в excel. – Noobster