Задам глупый вопрос, а есть хоть цены меньше 500?
27.04.2010 23:06:45
Задам глупый вопрос, а есть хоть цены меньше 500?
|
|
|
|
27.04.2010 23:10:14
|
|
|
|
29.04.2010 09:24:25
А почему нельзя сделать как описано в мануале?
Такой фильтр не работает?
Экс-битриксоид.
Компонент (и.с.) - существительное мужского рода (ГОСТ 34.003-90). |
|||
|
|
29.04.2010 09:31:13
|
|||||||||
|
|
30.04.2010 00:10:26
Я нашел ошибку:
поле price берется не из той таблицы. система определяет поле price как PROPERTY_100 из таблицы b_iblock_element_prop_s15, а должно браться из таблицы b_iblock_element_prop_s1 как PROPERTY_52 скорее всего дело в названии поля. завтра сделаю backup базы, поменяю название, и отпишусь. Вопрос могу ли я просто поменять название поля в админке или надо еще где-то что-то менять? |
|
|
|
30.04.2010 00:21:46
А у вас точно один инфоблок с символьным кодом "travel_points" (или как он там на самом деле называется)?
И при режиме хранения свойств в отдельных таблицах (т.н. инфоблоки+) фильтрация по свойствам не будет работать корректно если вы делаете выборку сразу из нескольких инфоблоков. Не пробовали перенести свойства в общую таблицу и сделать выборку?
Только поменяв сивольный код свойства, вам скорее всего придется перелопачивать много шаблонов, параметров компонентов и прочего, где это свойство задействовано. |
|||
|
|
30.04.2010 00:38:49
да, таблица (инфоблок) travel_points одна
вот такой select выбирает данные по путешествиям ---- SELECT BE.ID as ID,BE.IBLOCK_ID as IBLOCK_ID,BE.NAME as NAME,IF(EXTRACT(HOUR_SECOND FROM BE.ACTIVE_FROM)>0, DATE_FORMAT(BE.ACTIVE_FROM, '%d.%m.%Y %H:%i:%s'), DATE_FORMAT(BE.ACTIVE_FROM, '%d.%m.%Y')) as DATE_ACTIVE_FROM,IF(EXTRACT(HOUR_SECOND FROM BE.ACTIVE_TO)>0, DATE_FORMAT(BE.ACTIVE_TO, '%d.%m.%Y %H:%i:%s'), DATE_FORMAT(BE.ACTIVE_TO, '%d.%m.%Y')) as DATE_ACTIVE_TO,B.DETAIL_PAGE_URL as DETAIL_PAGE_URL,BE.DETAIL_TEXT as DETAIL_TEXT,BE.DETAIL_TEXT_TYPE as DETAIL_TEXT_TYPE, BE.PREVIEW_TEXT as PREVIEW_TEXT,BE.PREVIEW_TEXT_TYPE as PREVIEW_TEXT_TYPE,BE.PREVIEW_PICTURE as PREVIEW_PICTURE,L.DIR as LANG_DIR, FPS.PROPERTY_58 as PROPERTY_RATING_VALUE, FPS.DESCRIPTION_58 as PROPERTY_RATING_DESCRIPTION, concat(BE.ID , ':' , 58) as PROPERTY_RATING_VALUE_ID,BE.SORT as SORT, BE.CODE as CODE,BE.XML_ID as EXTERNAL_ID,BE.IBLOCK_SECTION_ID as IBLOCK_SECTION_ID, B.IBLOCK_TYPE_ID as IBLOCK_TYPE_ID,B.CODE as IBLOCK_CODE,B.XML_ID as IBLOCK_EXTERNAL_ID FROM b_iblock B INNER JOIN b_lang L ON B.LID=L.LID INNER JOIN b_iblock_element BE ON BE.IBLOCK_ID = B.ID INNER JOIN b_iblock_element_prop_s1 FPS ON FPS.IBLOCK_ELEMENT_ID = BE.ID WHERE 1=1 AND B.ID IN (0,1) AND ( (BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL) ) AND ((((BE.IBLOCK_ID = '1')))) AND ((((BE.ACTIVE='Y')))) ORDER BY FPS.PROPERTY_58 desc ,BE.SORT asc ,BE.ID desc LIMIT 4 ---- и если я добавляю and FPS.PROPERTY_52 <='500' в строчку ---- INNER JOIN b_iblock_element_prop_s1 FPS ON FPS.IBLOCK_ELEMENT_ID = BE.ID WHERE 1=1 AND B.ID IN (0,1) _____and FPS.PROPERTY_52 <='500'______ AND ((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL)) ---- то все выбирается корректно. по крайней мере select работает правильно. т.е Вы хотите сказать что после изменения названия поля ничего не поменяется? и надо все свойства переносить в общую таблицу? |
|
|
|
30.04.2010 00:51:45
А вот еще вопрос: все таблицы(инфоблоки) должны иметь символьный код? А то я смотрю например справочник "страны" его не имеет, а содержимое в нем есть, или например faq - тоже не имеет кода..
|
|
|
|
30.04.2010 01:23:46
Хм, очень интересный запрос у вас получился.
myvista myvista, а не могли бы вы показать запрос в точности для этого скрипта
'travel_points' - замените на нужный символьный код инфоблока 'price' - замените на нужный символьный код свойства. Не название, не ID, а код (он указывается в крайнем правом поле на закладке свойств формы редактирования инфоблока).
|
|||||
|
|
30.04.2010 09:28:10
я не понял, объясните поподробнее пож
|
|||
|
|
30.04.2010 20:00:35
|
|||
|
|
02.05.2010 18:10:13
название: Стоимость
id: 52 тип: число код: price |
|
|
|
02.05.2010 19:37:57
В Вашем запросе поменял
=IBLOCK_CODE' => 'travel_points', на =IBLOCK_CODE' => 'travels' $arFilter = array('=IBLOCK_CODE' => 'travels','PROPERTY' => array('type'=>1, '<=price' => 500)); и запрос сработал как надо И это естественно правильно, т.к это свойство относится к таблице путешествий, а не к таблице точек путешествий дальше разбираюсь... там еще куча всего... |
|
|
|
05.05.2010 00:53:57
следующий баг:
1. оказалось, что в двух инфоблоках одинаковые поля price. travels и travel_points в таблице travel_points изменил поле на price_ изменил IBLOCK_CODE с travel_points на travels итого на входе в GetList имею массив { [">=DATE_ACTIVE_FROM"]=> "29.10.1218" ["<=DATE_ACTIVE_FROM"]=> "16.02.2011" ["PROPERTY"]=> { ["type"]=> "1" ["<=price"]=> "500" } ["IBLOCK_CODE"]=> "travels" ["ACTIVE"]=> "Y" [">=PROPERTY_y"]=> "-59.5343180010956" ["<=PROPERTY_y"]=> "84.26717240431665" [">=PROPERTY_x"]=> 21.796875 ["<=PROPERTY_x"]=> 53.4375 выполняя GetList получаю select вроде бы все, что надо " SELECT FROM b_iblock B INNER JOIN b_lang L ON B.LID=L.LID INNER JOIN b_iblock_element BE ON BE.IBLOCK_ID = B.ID INNER JOIN b_iblock_element_prop_s1 FPS ON FPS.IBLOCK_ELEMENT_ID = BE.ID INNER JOIN b_iblock_property FP1 ON FP1.IBLOCK_ID=B.ID AND FP1.CODE='type' INNER JOIN b_iblock_property_enum FPEN1 ON FP1.ID = FPEN1.PROPERTY_ID AND FPS.PROPERTY_1=FPEN1.ID WHERE 1=1 AND B.ID IN (0,1) AND ((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL)) AND ((((BE.ACTIVE_FROM >= '1218-10-29 00:00:00')))) AND ((((BE.ACTIVE_FROM <= '2011-02-16 00:00:00')))) AND ((((FPEN1.ID = '1')))) AND ((((FPS.PROPERTY_52 <= '500')))) AND ((((BE.ACTIVE='Y')))) AND ((((FPS.PROPERTY_32 >= '-59.534318001096')))) AND ((((FPS.PROPERTY_31 >= '21.796875')))) AND ((((FPS.PROPERTY_32 <= '84.267172404317')))) AND ((((FPS.PROPERTY_31 <= '53.4375')))) " Но, нет полей которые надо выбрать....... почему-то работа с $arSelectFields происходит гораздо ниже по коду чем выполняется запрос. ручками вставляю select be.id - все начинает работать. почему? |
|
|
|
05.05.2010 02:13:38
Но предположим, что "таблица" - это все же "инфоблок", тогда:
Хоть это и не повлияет на результат, но если вы начали использовать конструкцию фильтра по свойствам через массив с ключом 'PROPERTY', то почему бы его не использовать до конца? Т.е. так:
Как я вижу, свойство с кодом type у вас имеет тип список, вы знаете о том, что конструкция 'type' => '1' выполнит фильтрацию по ID значения списка, а не по самому значению? |
|||||||||||
|
|
05.05.2010 09:28:52
таблица - это именно инфоблок. просто я еще не привык к терминологии bitrix
все параметры вызова: $resTP = CIBlockElement::GetList(array(), $arFilterTP, array("PROPERTY_travel"), false, array("ID")); т.е мне надо получить id путешествий, у которых тип (type)равен 1, и цена(price) менее 500
|
|||||
|
|
05.05.2010 19:43:57
'type' => '1' - будут выбираться все элементы, у которых ID значения свойства-списка type равно 1. а так: 'type_VALUE' => '1' - будут выбираться все элементы, у которых значение свойства-списка type равно 1. |
|||||||
|
|
19.10.2011 10:44:34
Добрался до этого этапа, дальше проблема в дате. Если задаю дату так:
если же старт дейт и енд дейт задавать так:
Как мне задать дату на пхп в нужном для битрикса формате?
новичек, не судите строго
|
|||||
|
|
19.10.2011 15:40:18
исправил уже. косяк был в свойствах.
новичек, не судите строго
|
|
|
|
23.03.2021 19:05:29
так до сих пор и не внесли в доки, как фильтровать по дате и какой нужен формат... спасибо эта тема помогла!
С ув. Вячеслав Докукин
|
|||
|
|
12.01.2022 09:46:08
|
|
|
|
12.01.2022 09:47:18
del
|
||||
|
|
|||