Оптимизировать функцию

Савелей

Новичок
Оптимизировать функцию

Есть цикл получения данных из бд:

PHP:
while ($row= mysql_fetch_array($result)) 
{

/*бла-бла-бла*/

 $row['field'] = getStructureById($row['id'],$row['table']);

}


function getStructureById($id,$table)
{
 if(!$id) return false;
 
 $result = mysql_query("SELECT id,name,text,options FROM {$table} WHERE id={$id}");
 while ($row= mysql_fetch_array($result)) 
 {
  /*бла-бла-бла*/
  $row['name'] = function($['name']);
  $row['text'] = function($['text']);
  $row[options] = function($[options]);
  $return[] = $row;
 }
  
}

Конечно. получается что функция дергает бд каждую итерацию...
делать join для таблиц не могу, потому как в функции еще много чего.
что не засунешь в бд.
как мне лучше это дело оптимизировать?


мои варианты
1 - ввести статик переменную (но как ее ввести если данные зависят от $id и $table, только eval наверно)
2 - кэшить в файлы
3 - хз.
 

Савелей

Новичок
iceman
так задание написано выше, мне нужно через функцию реализовать, без участия второй таблицы в первой.

то есть запрос первой как был:

SELECT * FROM maintable;

так должен и остаться.
 

Савелей

Новичок
triumvirat
iceman

Ну блин, писец этот для примера, да и вообще у Вас есть что сказать кроме этого???

и не нужно судить о человеке по коду, он не мой:)


по хорошему я бы добавил таблицу для сопоставления и выбрал бы один к многим за один раз все что мне нужно, но тут так не катит уперлись что нужно получить данные структуры не трогая основную таблицу.
 

Bitterman

Новичок
Я, честно говоря, так и не понял, что Делается в приведенном коде, но первое, что приходит в голову - засунуть все ID в массив и вытащить данные из БД через id IN (...) одним запросом.
 

Савелей

Новичок
в приведенном коде $row['field'] = получает все записи дополнительной таблицы структуры где id=id и table=table, если она есть;

хоть что-то, спасибо!
 

antson

Новичок
Партнер клуба
Савелей
не надо проектировать субд, так что бы была
связь id_подчиненой,имя_дочерней_таблицы
сие очень тонкое извращение .
Одназначно переписывать чтобы такого изврата не было.
Если код достался в наследство и бюджет за дороботку копеечный, то
1)проверить на хостинге наличие индексов по ид во всех подчиненных таблицах
2) убедиться что квери кеш задан и работает.
3а) если пары
ид,табл повторяются подряд, т.е. происходят последовательные вызовы с одинаковыми параметрами
то можно запоминать, что было при предыдущем вызове
и возвращать уже запомненый вариант.
3б) если повторы есть, но в разноброд, то уже надо оценивать
стоит ли кешировать все вызовы в рамках одного запуска
скрипта или нет
3в) тебе уже посоветовали. сперва все ид по нужным таблицам сгруппировать, выбрать их сразу ..
 
Сверху