[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Цикл обновления данных в таблице
grisha2013
Добрый день.

У меня возникла проблема.
Сделал цикл обновления рейтинга в таблице, но количество запросов прямо пропорционально количеству выводимых строк на странице.Сейчас 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";

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.