Для очистки таблиц модуля socialnetwork существует штатный метод ClearOld.
// CSocNetLog::ClearOld()
// /bitrix/modules/socialnetwork/classes/mysql/log.php:303
public static function ClearOld($days = 90)
{
global $DB;
$days = (int)$days;
if ($days <= 0)
{
return true;
}
$DB->Query("DELETE LC FROM b_sonet_log_comment LC INNER JOIN (SELECT L.TMP_ID FROM b_sonet_log L LEFT JOIN b_sonet_log_favorites LF ON L.ID = LF.LOG_ID WHERE LF.USER_ID IS NULL AND L.LOG_UPDATE < DATE_SUB(NOW(), INTERVAL ".$days." DAY)) L1 ON LC.LOG_ID = L1.TMP_ID", true);
$DB->Query("DELETE LS FROM b_sonet_log_site LS INNER JOIN (SELECT L.ID FROM b_sonet_log L LEFT JOIN b_sonet_log_favorites LF ON L.ID = LF.LOG_ID WHERE LF.USER_ID IS NULL AND L.LOG_UPDATE < DATE_SUB(NOW(), INTERVAL ".$days." DAY)) L1 ON LS.LOG_ID = L1.ID", true);
$DB->Query("DELETE LR FROM b_sonet_log_right LR INNER JOIN (SELECT L.ID FROM b_sonet_log L LEFT JOIN b_sonet_log_favorites LF ON L.ID = LF.LOG_ID WHERE LF.USER_ID IS NULL AND L.LOG_UPDATE < DATE_SUB(NOW(), INTERVAL ".$days." DAY)) L1 ON LR.LOG_ID = L1.ID", true)
return $DB->Query("DELETE FROM b_sonet_log WHERE LOG_UPDATE < DATE_SUB(NOW(), INTERVAL ".$days." DAY)", true);
}
Указанные метод очищает данные в таблицах за выбранные период - в качестве аргумента функции передаётся период в днях данные старше которого требуется удалять. Если ничего не передано - будет выбран период по умолчанию в 90 дней: т.е будут удалены данные старше 90 дней.
- b_sonet_log_comment
- b_sonet_log_site
- b_sonet_log_right
- b_sonet_log
Подготовим скрипт для запуска cron-таски для регулярной очистки таблиц
$_SERVER["DOCUMENT_ROOT"] = realpath(dirname(__FILE__) . "/..");
$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS", true);
define("NO_AGENT_CHECK", true);
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
ini_set('ignore_user_abort', 1);
ini_set('max_execution_time', 3300);
ini_set('memory_limit', '1024M');
set_time_limit(3300);
if (!\Bitrix\Main\Loader::includeModule('socialnetwork')) {
die('Не удалось подключить модуль socialnetwork');
}
CSocNetLog::ClearOld(90);
Повесив скрипт на cron-таску - получим регулярную очистку устаревших данных в таблицах модуля Социальной сети.