Битрикс: выбор дублей
19.08.2016 09:50
Типовая задача: выбор дублей в инфоблоке. Допустим, по какой-то причине задвоились артикулы (в примере это строковое свойство CODE).
Решение:
$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"]; require($DOCUMENT_ROOT."/bitrix/modules/main/include/prolog_before.php"); define("NO_KEEP_STATISTIC", true); define("NOT_CHECK_PERMISSIONS", true); set_time_limit(0); ini_set('max_execution_time', '3600'); ini_set('memory_limit', '512M'); if ( !$USER->IsAdmin() ) { $APPLICATION->AuthForm(""); } CModule::IncludeModule("iblock"); $IBLOCK_ID = 1; $obE = new CIBlockElement(); $arSelect = array( "ID", "NAME", "IBLOCK_ID", "PROPERTY_CODE",//added ); $arFilter = array( "IBLOCK_ID" => $IBLOCK_ID, "IBLOCK_ACTIVE" => "Y", "ACTIVE_DATE" => "Y", "ACTIVE" => "Y", ); $r = CIBlockElement::GetList( array(), $arFilter, false, false, $arSelect ); while ( $arCurrentItem = $r->GetNext() ) { $article = $arCurrentItem['PROPERTY_CODE_VALUE']; $arSelect2 = array( "ID", "NAME", "IBLOCK_ID", "PROPERTY_CODE",//added ); $arFilter2 = array( "IBLOCK_ID" => $IBLOCK_ID, "IBLOCK_ACTIVE" => "Y", "=PROPERTY_CODE" => $article, "ACTIVE_DATE" => "Y", "ACTIVE" => "Y", ); $r2 = CIBlockElement::GetList( array(), $arFilter2, false, false, $arSelect2 ); if ($r2->SelectedRowsCount() > 1) { while ( $arCurrentItem2 = $r2->GetNext() ) { echo ''; print_r($arCurrentItem2);//exit; echo ''; } } } echo 'fin';
Т.е. внутри первого обхода проверяется нет ли ещё записей с выбранным артикулом. Внутри второго обхода можно добавить удаление записей, либо Update. Всё!
перейти в Блог | Блог (стр. 6)
Ударим лайками по бездорожью, разгильдяйству и бюрократизму!
Ключевые слова (тэги): 1С-Битрикс 26 PHP 37 web-программирование 58 молодым домохозяйкам 39
Вам есть что сказать — ну я же чую.
Высказаться о наболевшем, я выслушаю: