Запрос, ограничение по доп. полю с сортировкой

Модератор
#
Re: Запрос, ограничение по доп. полю с сортировкой
К сожалению, в данном случае отсортировать записи по одному из доп. свойств, по которому осуществляется фильтрация не представляется возможным. Чтобы, все таки, записи сортировались, можно попробовать один из 2-х вариантов действий:
1. Значение дополнительного свойства "Дата", по которому осуществляется фильтрация и сортировка, нужно перенести в основное свойство "Дата".  

2. Вариант основанный на особенности СУБД MySQL - создать еще одно (новое) доп. свойство "Дата" и перенести в него значения из существующего доп. свойства "Дата". И его уже использовать в сортировке. Затем удалить "старое" доп. свойство "Дата" из списка доп. свойств. Смысл данной манипуляции, заключается в том, чтобы идентификатор доп. свойства, используемого в фильтрации и СОРТИРОВКЕ (Дата) должен быть больше идентификатора другого доп. свойства, используемого в фильтрации.
#
Re: Запрос, ограничение по доп. полю с сортировкой
а как отсортировать по дате элемента?
вроде простой вопрос но на форуме ничего нет) в api тоже размыто

есть ли ошибки в этом коде?

$element['type'] = 0;
$element['prefix'] = ' and ';
$element['name'] = 'shop_items_catalog_date_time';
$element['if'] = '!=';
$element['value'] = "''";
$element['sufix'] = '';
$param['select'][] = $element;
$param['items_field_order'] = " CONVERT(CONCAT(SUBSTR(shop_items_catalog_date_time, 7, 4), CHAR(45), SUBSTR(shop_items_catalog_date_time, 4, 2), CHAR(45), SUBSTR(shop_items_catalog_date_time, 1, 2), CHAR(32), SUBSTR(shop_items_catalog_date_time, 12, 8)) , DATETIME)";
$param['items_order'] = 'DESC';
Модератор
#
Re: Запрос, ограничение по доп. полю с сортировкой
Чтобы отсортировать по дате товара достаточно (поскольку дата является основным свойством) задать поле сортировки

$param['items_field_order'] = 'shop_items_catalog_date_time';
$param['items_order'] = 'Desc'; // Направление сортировки по убыванию даты. Если необходимо сортировать по возрастанию даты, то $param['items_order'] = 'Asc'; или не задаем данный параметр
#
Re: Запрос, ограничение по доп. полю с сортировкой
Вопрос следующий, а как тогда организовать сортировку такого типа:
-Есть 11 доп.свойств типа дата в магазине
-Необходимо сделать выборку товаров с датами самыми близкими к текущей дате
-Выявить самую близкую к текущей дате из всех дат в товаре и вывести товар, отображая именно эту дату.

Буду премного благодарен, если сможете помочь!
#
Re: Запрос, ограничение по доп. полю с сортировкой
ау...
#
Re: Запрос, ограничение по доп. полю с сортировкой
Пример кода(размещается перед вызовом метода ShowShop):
$element['type'] = 1;
$element['property_id'] = 123;
$element['prefix'] = ' AND (';
$element['if'] = '!=';
$element['value'] = '';
$element['sufix'] = ')';
$param['select'][] = $element;

$param['sql_external_select'] = ", (SELECT MAX(CONVERT(CONCAT(SUBSTR(shop_properties_items_table.shop_properties_items_value, 7, 4), CHAR(45), SUBSTR(shop_properties_items_table.shop_properties_items_value, 4, 2), CHAR(45), SUBSTR(shop_properties_items_table.shop_properties_items_value, 1, 2)),  DATE)
) FROM shop_properties_items_table WHERE shop_items_catalog_table.shop_items_catalog_item_id = shop_properties_items_table.shop_items_catalog_item_id AND shop_list_of_properties_table.shop_list_of_properties_id IN(123, 45, 789))
AS max_date";
$param['items_field_order'] = "(CONVERT(CONCAT(SUBSTR(max_date, 7, 4), CHAR(45), SUBSTR(max_date, 4, 2), CHAR(45), SUBSTR(max_date, 1, 2)),  DATE)";

Вместо 123 укажите идентификатор любого имеющегося у вас доп. свойства товаров(желательно то, которое задано у всех товаров). А вместо (123, 45, 789) - укажите перечисление идентификаторов всех ваших 11-ти доп. свойств типа "Дата".
Предложенный метод, конечно, никак не сравнит имеющиеся даты с текущей с целью анализа наиболее близкой к ней, он просто выберет самую большую дату(можете добавить еще ограничение, чтобы она была меньше текущей) среди заданных в доп. свойствах и выберет товары, отсортированные по ней.
Авторизация