У меня возникла проблема.
Сделал цикл обновления рейтинга в таблице, но количество запросов прямо пропорционально количеству выводимых строк на странице.Сейчас 54 запроса, позже перевалит за сотню.
Как оптимизировать сие безобразие?
Можно-ли как-то оптимизировать обновление в БД или лучше вычислять на лету и выводить данные прямо на страницу, не занося результаты в базу лишний раз?
Но проблема в том, что мне нужно вывести результаты отсортированные по рейтингу, и сделать это можно сохраняя расчитанный рейтинг в таблице БД.
вот мой код:
$query_koeff = "SELECT `koeff` FROM `setting` WHERE `id`='$id'";
$res_koeff = mysql_query($query_koeff,$db) or die(mysql_error());
$koeff = mysql_fetch_assoc($res_koeff);
$q++;
$query_info = "SELECT `id`, `value1`, `value2`, `value3` FROM `data` WHERE `my_id`='$id'";
$res_info = mysql_query($query_info,$db) or die(mysql_error());
$q++;
while($res = mysql_fetch_assoc($res_info))
{
switch($depo['value3'])
{
case 0: $res_koeff = 100;
break;
case 1: $res_koeff = 100;
break;
case 2: $res_koeff = $koeff['koeff'] * 100;
break;
case 3: $res_koeff = pow($koeff['koeff'], 2) * 100;
break;
case 4: $res_koeff = pow($koeff['koeff'], 3) * 100;
break;
case 5: $res_koeff = pow($koeff['koeff'], 4) * 100;
break;
default: $res_koeff = 100;
break;
}
if($depo['value2'] > 0 AND $depo['value1'] > 0)
{
$rating = round($res_koeff * ($depo['value2']/$depo['value1']),2);
}
$update_id = $depo['id'];
$query_rating = "UPDATE `data` SET `rating`='$rating' WHERE `id`='$update_id'";
$res_rating = mysql_query($query_rating,$db) or die(mysql_error());
$q++;
}
Затем я вывожу инфу отсортированную по рейтингу с помощтю запроса
$query = "SELECT * FROM `data` WHERE `my_id`='$id' ORDER BY `rating` DESC";