• Модуль: search
  • Путь к файлу: ~/bitrix/modules/search/classes/mysql/suggest.php
  • Класс: CSearchSuggest
  • Вызов: CSearchSuggest::SetResultCount
function SetResultCount($result_count)
{
	$DB = CDatabase::GetModuleConnection('search');
	if (mb_strlen($this->_filter_md5) && mb_strlen($this->_phrase))
	{
		$result_count = intval($result_count);
		$filter_md5 = $DB->ForSQL($this->_filter_md5);
		$phrase = $DB->ForSQL($this->_phrase, 250);

		$rsQueryStat = $DB->Query("
			SELECT ID, FILTER_MD5, RATE, DATEDIFF(now(), TIMESTAMP_X) DAYS, RESULT_COUNT
			FROM b_search_suggest
			WHERE SITE_ID = '".SITE_ID."'
			AND FILTER_MD5 = '".$filter_md5."'
			AND PHRASE = '".$phrase."'
		");

		$arQueryStat = $rsQueryStat->Fetch();
		if (!$arQueryStat)
		{
			$DB->Add("b_search_suggest", array(
				"SITE_ID" => SITE_ID,
				"FILTER_MD5" => $this->_filter_md5,
				"PHRASE" => $this->_phrase,
				"RATE" => 1.0,
				"~TIMESTAMP_X" => $DB->CurrentTimeFunction(),
				"RESULT_COUNT" => $result_count,
			));
		}
		else
		{
			$bUpdate = $result_count != $arQueryStat["RESULT_COUNT"];

			$suggest_save_days = COption::GetOptionInt("search", "suggest_save_days");
			if ($suggest_save_days <= 0)
				$suggest_save_days = 360;

			if ($arQueryStat["DAYS"] <= 0)
			{
				$rate = $arQueryStat["RATE"];
				$bUpdate = $bUpdate || false;
			}
			elseif ($arQueryStat["DAYS"] >= $suggest_save_days)
			{
				$rate = 1.0;
				$bUpdate = $bUpdate || true;
			}
			else
			{
				$rate = doubleval($arQueryStat["RATE"]) + ($suggest_save_days - $arQueryStat["DAYS"]) / $suggest_save_days;
				$bUpdate = $bUpdate || true;
			}

			if ($bUpdate)
			{
				$DB->Query("
					UPDATE
						b_search_suggest
					SET
						RESULT_COUNT = ".$result_count.",
						RATE = ".$rate.",
						TIMESTAMP_X = ".$DB->CurrentTimeFunction()."
					WHERE
						ID = ".$arQueryStat["ID"]."
				");
			}
		}

		while ($arQueryStat = $rsQueryStat->Fetch())
		{
			$DB->Query("DELETE FROM b_search_suggest WHERE ID = ".$arQueryStat["ID"]);
		}
	}
}