1С-Битрикс. Вытаскиваем телефоны покупателей из заказов
За основу будет взят последний оформленный заказ.
Подразумеваем, что телефон хранится в свойстве заказа PHONE.
Код
//<?php use Bitrix\Main\Application; use Bitrix\Main\Loader; Loader::includeModule('sale'); // ID типа плательщика $personTypeId = 1; $propPhoneId = 0; $propertyIterator = \CSaleOrderProps::GetList( [], [ 'CODE' => 'PHONE', 'PERSON_TYPE_ID' => $personTypeId, ] ); if ($propertyPhone = $propertyIterator->Fetch()) { $propPhoneId = $propertyPhone['ID']; } $phonesOrderPropValues = []; if ($propPhoneId > 0) { $connection = Application::getConnection(); $phonesOrderPropValuesIterator = $connection->query( sprintf( "SELECT * FROM ( SELECT v.ID, v.ORDER_ID, v.`NAME`, v.`VALUE`, o.USER_ID FROM b_sale_order_props_value v INNER JOIN b_sale_order o ON v.ORDER_ID = o.ID WHERE v.ORDER_PROPS_ID = %s ORDER BY v.ID DESC ) x GROUP BY USER_ID", $connection->getSqlHelper()->forSql($propPhoneId) ) ); while ($phonesOrderPropValue = $phonesOrderPropValuesIterator->fetch()) { $phonesOrderPropValues[$phonesOrderPropValue['USER_ID']] = $phonesOrderPropValue['VALUE']; } }
В итоге получаем массив $phonesOrderPropValues.
Ключом будет ID пользователя, значением — его телефон.
Если кто знает как написать sql-запрос красивее или производительнее — поделитесь :)