Добрый день. Возможно, тема вопроса сформулирована не совсем правильно, но ниже я постараюсь разъяснить.
Я делаю выборrу из таблицы
SELECT * FROM history WHERE (`dir` = 1 OR `dir` = 3)
и получаю около 25 записей. Далее, я работаю с каждой записью, проверяя чем равен dir. Если =3, идёт приращение одной переменной. Если dir=1, то мне необходимо найти в этой же таблице последнюю по времени запись у которой dir=3 и номер позиции равен тому, который у той, что я нашёл с dir=1. (чтобы было чуть понятней, это таблица приходов/выдачи со склада. 1 = выдана позиция. 3 = принята на склад. в данном случая я ищу цену, по которой в последний раз пришла позиция, выдаваемая мной сейчас).
Запрос
SELECT id, doc_cost FROM history WHERE `posid` = $counthis[posid] AND `dir`=3 ORDER BY id DESC LIMIT 1
загружает MySQL чуть ли не намертво.
Посему я делаю полную выборку и уже в ней ищу максимальную цену обычным условием.
$costs = mysql_query("SELECT id, doc_cost FROM history WHERE `posid` = $counthis[posid] AND `dir`=3");
while ($cost = mysql_fetch_array($costs)){
if($testid<$cost[id]){
$testid = $cost[id];
}
}
Таким образом я получаю нужное мне значение достаточно быстро (не более 5сек).
Вопрос, почему так? И как лучше? Как оптимизировать?