Проблема поиска Magento Advance с пользовательским запросом

Я изменил расширенный поиск Magento app\code\core\Mage\CatalogSearch\Model\Mysql4, чтобы использовать некоторые пользовательские условия, потому что я хотел, чтобы поиск использовал AND для определенных атрибутов вместо IN

Но он ничего не возвращает. Вот запрос, который я изменил:

if(in_array($value,$cSizeArray) && isset($_GET['condom_size'])){
    $select->where("{$tableAlias}.`value` IN(?)", $value);
}elseif(in_array($value,$lSizeArray) && isset($_GET['lubepack'])){
    $select->where("{$tableAlias}.`value` IN(?)", $value);
}else{
    if($tableAlias == 'ast_types' || $tableAlias== 'ast_lubetype'){
        $condition = "( ";  
        foreach($value as $v){
            $condition.=" {$tableAlias}.`value`= $v AND";
        }
        $condition = substr($condition,0,-3);           
        $condition .= " ) ";    
        $select->where($condition);
    }else{
        $select->where("{$tableAlias}.`value` IN(?)", $value);
    }
}

вот запрос, который я получил, используя echo $select:

 `SELECT DISTINCT  `e`.*, `price_index`.`price`, `price_index`.`tax_class_id`, `price_index`.`final_price`, IF(`price_index`.`tier_price`, LEAST(`price_index`.`min_price`, `price_index`.`tier_price`), `price_index`.`min_price`) AS `minimal_price`, `price_index`.`min_price`, `price_index`.`max_price`, `price_index`.`tier_price`, `cat_index`.`position` AS `cat_index_position` FROM `catalog_product_entity` AS `e`
 INNER JOIN `catalog_product_index_price` AS `price_index` ON price_index.entity_id = e.entity_id AND price_index.website_id = '1' AND price_index.customer_group_id = 0
 INNER JOIN `catalog_category_product_index` AS `cat_index` ON cat_index.product_id=e.entity_id AND cat_index.store_id='3' AND cat_index.visibility IN(3, 4) AND cat_index.category_id='2'
 INNER JOIN `catalog_product_index_eav` AS `ast_types` ON e.entity_id=ast_types.entity_id AND ast_types.attribute_id=150 AND ast_types.store_id=3
 INNER JOIN `catalog_product_index_eav` AS `ast_condom_size` ON e.entity_id=ast_condom_size.entity_id AND ast_condom_size.attribute_id=151 AND ast_condom_size.store_id=3 WHERE ((  ast_types.value= 131  AND ast_types.value= 135 ) ) AND (ast_condom_size.`value` IN('141', '140'))`

Новый измененный запрос:

SELECT DISTINCT `e`.*, `price_index`.`price`, `price_index`.`tax_class_id`, `price_index`.`final_price`, IF(`price_index`.`tier_price`, LEAST(`price_index`.`min_price`, `price_index`.`tier_price`), `price_index`.`min_price`) AS `minimal_price`, `price_index`.`min_price`, `price_index`.`max_price`, `price_index`.`tier_price`, `cat_index`.`position` AS `cat_index_position` FROM `catalog_product_entity` AS `e`
 INNER JOIN `catalog_product_index_price` AS `price_index` ON price_index.entity_id = e.entity_id AND price_index.website_id = '1' AND price_index.customer_group_id = 0
 INNER JOIN `catalog_category_product_index` AS `cat_index` ON cat_index.product_id=e.entity_id AND cat_index.store_id='3' AND cat_index.visibility IN(3, 4) AND cat_index.category_id='2'
 INNER JOIN `catalog_product_index_eav` AS `ast_types` ON e.entity_id=ast_types.entity_id AND ast_types.attribute_id=150 AND ast_types.store_id=3
 INNER JOIN `catalog_product_index_eav` AS `ast_condom_size` ON e.entity_id=ast_condom_size.entity_id AND ast_condom_size.attribute_id=151 AND ast_condom_size.store_id=3 WHERE ((  ast_types.`value`= 135 OR ast_types.`value`= 132 OR ast_types.`value`= 131  ) ) AND (ast_condom_size.`value` IN('141', '140')) GROUP BY sku HAVING COUNT(*)=3 

Любая идея о том, что может быть не так с подходом...


person Ravish    schedule 09.12.2011    source источник
comment
Вы должны взглянуть на результирующий SQL-запрос.   -  person Roman Snitko    schedule 09.12.2011


Ответы (1)


WHERE ((  ast_types.value= 131  AND ast_types.value= 135 ) )

Вам нужно, чтобы значение было равно 131 и 135 одновременно. Это никогда не будет правдой, поэтому ваш набор результатов будет пустым.

person Anders Thirsgaard Rasmussen    schedule 09.12.2011
comment
да, я разобрался, теперь пытаюсь добавить GROUP BY sku HAVING COUNT(*)=? в запрос, но не знаю, куда его добавить - person Ravish; 09.12.2011
comment
Я добавил указанное выше условие в запрос, когда я запускаю запрос, он возвращает соответствующую запись, но поиск по-прежнему отображает неверные записи... - person Ravish; 09.12.2011
comment
можно ли получить все атрибуты, связанные с продуктом? как мы делаем $_product->getAttributeSetId(), чтобы получить идентификатор набора атрибутов? - person Ravish; 10.12.2011