Привет всем,
натолкнулся на типовую задачу, ответ навскидку найти не удалось.
Имеется допсвойство, необходимо реализовать фильтрацию товаров в ИМ по нему.
Собственно, с XSLT и PHP проблем нет, вот код фильтрации:
/* Ограничение по наличию */
if(isset($_GET['in_stock']) AND $_GET['in_stock'] == "on")
{
$element['type'] = 1;
$element['prefix'] = 'AND';
//$element['name'] = '';
$element['property_id'] = 194;
$element['if'] = '=';
$element['value'] = '0';
$element['sufix'] = '';
$param['select'][] = $element;
$external_propertys['in_stock'] = "on";
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
}
Замечательно выводит те товары, у которых данное допсвойство было хоть раз проставлено в 0 или 1 через редактирование товара. Свойство - флажок.
Для тех товаров, которым данный флажок ни разу не проставлялся, фильтр не срабатывает, т.к. ни значение 0, ни 1 в таблице свойств им не присвоено.
Вот соответствующий громоздкий SQL-запрос:
SELECT SQL_CALC_FOUND_ROWS DISTINCT shop_items_catalog_table.shop_items_catalog_item_id FROM shop_items_catalog_table LEFT JOIN shop_list_of_properties_table
ON shop_items_catalog_table.shop_shops_id = shop_list_of_properties_table.shop_shops_id
LEFT JOIN shop_properties_items_table
ON shop_items_catalog_table.shop_items_catalog_item_id = shop_properties_items_table.shop_items_catalog_item_id
AND shop_properties_items_table.shop_list_of_properties_id = shop_list_of_properties_table.shop_list_of_properties_id WHERE shop_items_catalog_table.shop_items_catalog_is_active = '1' AND shop_items_catalog_table.shop_items_catalog_modification_id = '0' AND shop_items_catalog_table.shop_items_catalog_access IN(0,-1) AND shop_items_catalog_table.shop_shops_id='7' AND shop_items_catalog_table.shop_groups_id = '642' AND (shop_items_catalog_table.shop_items_catalog_putend_date >= '2012-12-06 22:53:00' OR shop_items_catalog_table.shop_items_catalog_putend_date ='0000-00-00 00:00:00') AND shop_items_catalog_table.shop_items_catalog_putoff_date <= '2012-12-06 22:53:00' AND shop_list_of_properties_table.shop_list_of_properties_id=194 AND shop_properties_items_table.shop_properties_items_value = '0' AND ( 1 ) and shop_groups_id NOT IN (661, 662) HAVING 1 ORDER BY shop_items_catalog_table.shop_items_catalog_date_time Asc LIMIT 0, 70
К сожалению, не могу сообразить, как его модифицировать, чтобы JOIN игнорировал условия, если соответствующего поля для данного товара в таблице свойств не обнаружено. И далее, как изменить PHP, чтобы он генерировал соответствующий запрос.
Спасибо заранее!