Tad может что-то лучше посоветует
но выскажу, что узкое место у тебя тройная выборка из БД
Например
SELECT kodres FROM mattek where kodpredst='%2' and predstico>'0' and sredotp<>'0'
UPDATE mattek SET sredotp=(SELECT round(sum(otp*v_post)/sum(v_post),2) FROM resurs WHERE kodres="%1" AND otp<>"" AND otp<>"0") where kodres="%1"
Попробуйте использовать временные таблицы. Мне в свое время помогло ускорить выборку