在magento中使用OR条件进行高级搜索

时间:2013-04-11 11:25:42

标签: magento

我想使用高级表单进行搜索,但是使用mysql OR语句而不是AND语句。

例如,我在产品名称字段中搜索产品“A”,在产品类型字段中搜索“B”。搜索结果必须是A OR B.

我也改变了条件

系统>配置>目录>目录>目录搜索>搜索类型

搜索Type = LIKE

但那不行,所以还有其他方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您需要在自定义模块中重写

Mage_CatalogSearch_Model_Resource_Advanced_Collection

(\ app \ code \ core \ Mage \ CatalogSearch \ Model \ Resource \ Advanced \ Collection.php)

并替换为addFieldsToFilter方法的结尾(Magento 1.7.0.2上的第132行)

if (!is_null($previousSelect)) {
    $select->where('t1.entity_id IN (?)', new Zend_Db_Expr($previousSelect));
}

通过

if (!is_null($previousSelect)) {
    $select->orWhere('t1.entity_id IN (?)', new Zend_Db_Expr($previousSelect));
}

使用orWhere代替where会将下一个条件添加为查询的OR。

我没有对它进行过如此多的测试,所以根据属性类型可能会有一些技巧,但它似乎与文本属性相关。

更新表示您需要在Magento 1.7.0.2上的第191行扩展(或修改用于测试目的)Mage_CatalogSearch_Model_Resource_Advanced和更改addIndexableAttributeModifiedFilter方法的下拉属性

$select->where("{$tableAlias}.value IN(?)", $value);

通过

$select->orWhere("{$tableAlias}.value IN(?)", $value);

请注意,这远非完整的解决方案,因为它在混合文本和dropdonws时不起作用。实现完整的OR应该稍微复杂一些,因为在添加过滤器时可能需要检查现有条件。

干杯