• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/internals/product2product.php
  • Класс: BitrixSaleInternalsProduct2ProductTable
  • Вызов: Product2ProductTable::refreshProductStatistic
static function refreshProductStatistic($liveTime = 10)
{
	$liveTime = (int)$liveTime;
	$connection = MainApplication::getConnection();

	if (!$connection->isTableExists('b_sale_order_product_stat'))
		return;

	$sqlDelete = "TRUNCATE TABLE b_sale_order_product_stat";
	$connection->query($sqlDelete);
	$dateLimit = "";
	if ($liveTime > 0)
	{
		$helper = $connection->getSqlHelper();
		$liveTo = $helper->addSecondsToDateTime($liveTime * 24 * 3600, "b.DATE_INSERT");
		$dateLimit = " AND NOW() < $liveTo";
	}
	$sqlUpdate = "
		INSERT INTO b_sale_order_product_stat (PRODUCT_ID, RELATED_PRODUCT_ID, ORDER_DATE, CNT) 
			SELECT b.PRODUCT_ID as PRODUCT_ID, b1.PRODUCT_ID as RELATED_PRODUCT_ID, DATE(b.DATE_INSERT) as ORDER_DATE, COUNT(b.PRODUCT_ID)
			FROM b_sale_basket b, b_sale_basket b1
			WHERE b.ORDER_ID = b1.ORDER_ID 
				AND	b.ID <> b1.ID
				$dateLimit 
  				GROUP BY b.PRODUCT_ID, b1.PRODUCT_ID, ORDER_DATE
  				ORDER BY NULL";
	$connection->query($sqlUpdate);

	$sqlDelete = "TRUNCATE TABLE b_sale_product2product";
	$connection->query($sqlDelete);
	$sqlUpdate = "
			INSERT INTO b_sale_product2product (PRODUCT_ID, PARENT_PRODUCT_ID, CNT) 
				SELECT ops.PRODUCT_ID, ops.RELATED_PRODUCT_ID, SUM(ops.CNT)
				FROM b_sale_order_product_stat ops
				GROUP BY PRODUCT_ID, RELATED_PRODUCT_ID
				ORDER BY NULL
		";

	return $connection->query($sqlUpdate);
}