2. сократил количество запросов до одного. Правда, сложного. Не знаю, лучше ли это нескольких более простых
На большой базе товаров-заказов этот запрос вводит SQL-сервер в глубокую задумчивость, так что я вернул старый набор в несколько простых запросов, работаюший суммарно намного быстрее. Надо заменить {php}-часть блока.
{php}
$max_products = 10;
$min_sales = 1;
$p = $this->get_template_vars('product_info');
$data = db_query("SELECT orderID FROM ".ORDERED_CARTS_TABLE."
JOIN ".SHOPPING_CART_ITEMS_TABLE." USING (itemID)
WHERE productID=".$p['productID']);
while ($row = db_fetch_assoc($data))
{
$data1 = db_query("SELECT productID FROM ".ORDERED_CARTS_TABLE."
JOIN ".SHOPPING_CART_ITEMS_TABLE." USING (itemID)
WHERE orderID=".$row['orderID']." AND NOT productID=".$p['productID']);
while ($row1 = db_fetch_assoc($data1))
$products[$row1['productID']]['num']++;
}
arsort($products);
$i=1;
foreach ($products as $key => $var)
{
if ($i > $max_products || $var['num'] < $min_sales) unset($products[$key]);
elseif ($row = db_fetch_assoc(db_query("SELECT s.productID,s.name,s.price,s.brief_description,t.filename
FROM ".PRODUCTS_TABLE." AS s
JOIN ".PRODUCT_PICTURES." AS t
ON s.default_picture=t.photoID
WHERE s.enabled=1 AND s.productID=$key
LIMIT 1")))
{
$i++;
$products[$key]['productID'] = $row['productID'];
$products[$key]['name'] = $row['name'];
$products[$key]['price'] = $row['price'];
$products[$key]['brief_description'] = htmlspecialchars($row['brief_description']);
$products[$key]['filename'] = (strlen($row['filename'])>0 && file_exists( 'data/small/'.$row['filename'])) ? 'data/small/'.$row['filename'] : 'empty.gif';
$products[$key]['PriceWithUnit'] = show_price($row['price']);
$products[$key]['ras'] = strpbrk(substr($var['num'],-1),"234") && substr($var['num'],-1,1)<>"1" ? "раза":"раз";
if (isset($_SESSION['log']))
{
$resDiscount = dscCalculateDiscount($products[$key]['price'], $_SESSION['log']);
$products[$key]['price'] = $resDiscount['rest_current_unit'];
$products[$key]['discount_price']= addUnitToPrice($resDiscount['rest_current_unit']);
}
}
else unset($products[$key]);
}
$this->assign("products_addon", $products);
{/php}