Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save alexey-kar/5361e7366c7c2aa9b9e2511793f5fc62 to your computer and use it in GitHub Desktop.
Save alexey-kar/5361e7366c7c2aa9b9e2511793f5fc62 to your computer and use it in GitHub Desktop.
При стандартной сортировке если свойство типа Строка, то сортировка по нему производится как по строке, даже если там число, этот код даёт возможность сортировать поле Строка как Число
SELECT
`iblock_element`.`ID` AS `ID`,
`iblock_element`.`NAME` AS `NAME`,
`iblock_element_props_single`.`IBLOCK_ELEMENT_ID` AS `IBLOCK_ELEMENT_PROPS_SINGLE_IBLOCK_ELEMENT_ID`,
`iblock_element_props_single`.`PROPERTY_661` AS `IBLOCK_ELEMENT_PROPS_SINGLE_PROPERTY_661`,
`iblock_element_props_single`.`PROPERTY_661`+0 AS `PROPS_TEST`
FROM `b_iblock_element` `iblock_element`
INNER JOIN `b_iblock_element_prop_s173` `iblock_element_props_single` ON `iblock_element`.`ID` = `iblock_element_props_single`.`IBLOCK_ELEMENT_ID`
WHERE `iblock_element_props_single`.`PROPERTY_661` > 0
ORDER BY `iblock_element_props_single`.`PROPERTY_661`+0 DESC
<?
$iblockId = 173;
$entityPropsSingle = \Bitrix\Main\Entity\Base::compileEntity(
sprintf('PROPS_SINGLE_%s', $iblockId),
[
'IBLOCK_ELEMENT_ID' => ['data_type' => 'integer'],
'PROPERTY_661' => ['data_type' => 'integer'],
],
[
'table_name' => sprintf('b_iblock_element_prop_s%s', $iblockId),
]
);
\Bitrix\Main\Application::getConnection()->startTracker();
$result = \Bitrix\Iblock\ElementTable::getList([
'select' => [
'ID',
'NAME',
'PROPS_SINGLE.*',
'PROPS_TEST',
],
'filter' => [
'>PROPS_SINGLE.PROPERTY_661' => 0,
],
'order' => [
'PROPS_TEST' => 'DESC'
],
'runtime' => [
'PROPS_SINGLE' => [
'data_type' => $entityPropsSingle->getDataClass(),
'reference' => [
'=this.ID' => 'ref.IBLOCK_ELEMENT_ID'
],
'join_type' => 'inner'
],
'PROPS_TEST' => [
'data_type' => 'integer',
'expression' => ['%s+0', 'PROPS_SINGLE.PROPERTY_661']
],
],
]);
// Можно смотреть сформированный запрос
echo '<pre>', $result->getTrackerQuery()->getSql(), '</pre>';
echo '<pre>', print_r($result->fetchAll()), '</pre>';
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment