Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Генерация запросов

00 голосов
1
У меня такой вопрос почему когда я задаю такой фильтр

...
$filt=array( "IBLOCK_TYPE"=>$arParams["IBLOCK_TYPE"],
"IBLOCK_ID"=>$arParams["IBLOCK_ID"],
"ACTIVE"=>"Y",
"<RIGHT_MARGIN"=>$arResult["TEHNOLOGY"]["RIGHT_MARGIN"],
">LEFT_MARGIN" => $arResult["TEHNOLOGY"]["LEFT_MARGIN"]
);
....



В результате генерируется следующий запрос:

SELECT DISTINCT BS.*, B.LIST_PAGE_URL, B.SECTION_PAGE_URL, B.IBLOCK_TYPE_ID, B.CODE as IBLOCK_CODE, B.XML_ID as IBLOCK_EXTERNAL_ID, BS.XML_ID as EXTERNAL_ID, DATE_FORMAT(BS.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') as TIMESTAMP_X, DATE_FORMAT(BS.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE
FROM
b_iblock_section BS
INNER JOIN b_iblock B ON BS.IBLOCK_ID = B.ID
LEFT JOIN b_iblock_group IBG ON IBG.IBLOCK_ID=B.ID
WHERE
1=1 AND ((((BS.IBLOCK_ID = '8')))) AND ((((BS.ACTIVE='Y')))) AND (BS.RIGHT_MARGIN <= 8) AND (BS.LEFT_MARGIN >=1) AND ((((B.IBLOCK_TYPE_ID LIKE 'info')))) AND ((((B.ID = '8'))))
ORDER BY
BS.LEFT_MARGIN asc


У меня этот вопрос возникал и раньше при работе с разделами, но опять он сплыл. Может я что-то не правильно указал в фильтре. Я хотел что бы условие было > или <, но никак не (=>, <=).
И еще я пониаю что в этом случае можно сделать

...
$filt=array( "IBLOCK_TYPE"=>$arParams["IBLOCK_TYPE"],
"IBLOCK_ID"=>$arParams["IBLOCK_ID"],
"ACTIVE"=>"Y",
"<RIGHT_MARGIN"=> ($arResult["TEHNOLOGY"]["RIGHT_MARGIN"]-1),
">LEFT_MARGIN" => ($arResult["TEHNOLOGY"]["LEFT_MARGIN"]+1)
);
....

Но все же.... можно ли это заставить работать без учета +1, объясню почему, допустим в данный момент я реализую компонент в таком виде, пройдет обновление где это исправят, в итоге я потеряю 2 записи чево бы не очень хотелось.

четкая запись в документации про фильтр
Цитата

Перед названием фильтруемого поля можно указать тип проверки фильтра:

* "!" - не равно
* "<" - меньше
* "<=" - меньше либо равно
* ">" - больше
* ">=" - больше либо равно
* "><" - между
* и т.д.



Так же попробовал

Код
 $filt=array(     "IBLOCK_TYPE"=>$arParams["IBLOCK_TYPE"],
           "IBLOCK_ID"=>$arParams["IBLOCK_ID"],
           "ACTIVE"=>"Y",
                       "><"."LEFT_MARGIN" => array(
                                                   $arResult["TEHNOLOGY"]["LEFT_MARGIN"],
                                                   $arResult["TEHNOLOGY"]"RIGHT_MARGIN"]
                                                  )

     );


Желаемого так же не получил (ВООБЩЕ)


Код
SELECT DISTINCT BS.*, B.LIST_PAGE_URL, B.SECTION_PAGE_URL, B.IBLOCK_TYPE_ID, B.CODE as IBLOCK_CODE, B.XML_ID as IBLOCK_EXTERNAL_ID, BS.XML_ID as EXTERNAL_ID, DATE_FORMAT(BS.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') as TIMESTAMP_X, DATE_FORMAT(BS.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE
FROM
b_iblock_section BS
INNER JOIN b_iblock B ON BS.IBLOCK_ID = B.ID
LEFT JOIN b_iblock_group IBG ON IBG.IBLOCK_ID=B.ID
WHERE
1=1 AND ((((BS.IBLOCK_ID = '8')))) AND ((((BS.ACTIVE='Y')))) AND (BS.LEFT_MARGIN >=1) AND ((((B.IBLOCK_TYPE_ID LIKE 'info')))) AND ((((B.ID = '8'))))
ORDER BY
BS.LEFT_MARGIN asc 
спросил 07 Июль, 13 от Nachtigal (120 баллов)

1 Ответ

00 голосов
Код
AND ((((B.IBLOCK_TYPE_ID LIKE 'info'))))
Смысл указывать IBLOCK_TYPE, когда и так известен IBLOCK_ID? Чтобы запрос работал еще медленнее?
ответил 07 Июль, 13 от Eddie (2,060 баллов)

Похожие вопросы

0 голосов
3 ответов
спросил 10 Май, 14 от W1Ng (540 баллов)
0 голосов
4 ответов
+1 голос
6 ответов
спросил 30 Ноя, 13 от FlashKO (130 баллов)
0 голосов
3 ответов
спросил 18 Июнь, 13 от Nelegal (640 баллов)