Вот чтобы не задавать глупых вопросов, а точно видеть что и где у тебя повторяется... нужно было поставить xdebug и сделать профайлинг. А ты сидишь и гадаешь на кофейной гуще.... А давайте мы еще эту лапку оторвем... Жужжжит мушка... Оторовем-ка еще бошку.... О! Не жужжжит мушка... Я знаю что у тебя там тормозит, но делать твою работу за тебя я не буду. В общем, как только захочешь решать этот вопрос - читай что я написал и непонятное спрашивай. А помогать тебе гадать.... я пас.
$attributes_query = tep_db_query("select products_options, products_options_values, options_values_price, price_prefix from " . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . " where orders_id = $ordernummer and orders_products_id = '" . (int)$orders_products['orders_products_id'] . "'"); профайлер грит что мы эту строчку вызываем 226 раз, со средним временем 13ms и в итоге она самая весомая, хм, ее разве можно к основному запросу подклеить? Она же на каждую позицию в заказе отдельно вызывается. Иначе как выяснить что атрибуты именно этой позиции?
а табличка к которой он обращается ABLE_ORDERS_PRODUCTS_ATTRIBUTES, сама по себе 277000 записей, с текстовыми значениями...
Ее можно переделать. Так чтобы она вытаскивала не 1 order_id за раз. А все сколько тебе надо. Тогда ее достаточно будет вызвать 1 раз не в цикле.
тоесть тормозит не в назначениях переменных и не в fetch_arrow а конкретно запрос к mysql... вот вопрос как бы его сделать 1 раз
я как бы мозгом это понимаю, но оформить не могу фишка с джоином не прокатывает тоесть ей сразу надо 2 поля сопоставлять
select * from orders_products op, orders_products_attributes pa where pa.orders_products_id=op.orders_products_id and pa.orders_id=op.orders_id в принципе вот такой запрос делает 277тыс строк, и по идее в нем все есть...
SELECT * FROM orders_products op, orders_products_attributes pa WHERE pa.orders_id = op.orders_id А вот такой делает и вовсе 677тыс строк...
ты перед этим одним запросом получил свою 1000 order_id. Теперь тебе нужно взять их в массив. и сделать второй запрос с таким условием WHERE order_id IN (' . implode(',', $arrOrderId) . ') У тебя выберется только та информация, которая нужна к первому запросу.
Получившиеся результаты сохраняешь в 2хмерный массив $resultOrder[$orderId][] = $row Все. Теперь бежишь по первому массиву. Берешь оттуда order_id из второго массива достаешь нужные тебе поля и заносишь в строку для xml Итого у тебя ровно 3 цикла.
Дык они же вложенные, как тут... Order Order Order->Product ->Product Product-Attributes 1-2-3-4 Вобщем спасибо конечно. Но логику то я понимаю, написать это не могу