如何检查属性属于opencart中的特定产品

时间:2014-04-22 08:02:32

标签: php mysql opencart

我正在尝试获得具有倍数特定属性的产品。 我的意思是说,我想搜索那些有"类型" =戒指和"金属" =黄金

的产品

我尝试使用 IN 运算符,但它是OR运算的替代方法。我需要AND操作。

product_attribute表只有product_id,attribute_id,所以我如何在mysql中执行和操作

opencart 1.5.4版

我已尝试过以下查询

SELECT *   FROM oc_product_attribute  WHERE product_id=42 AND attribute_id=15 AND attribute_id=17

输出为空白

1 个答案:

答案 0 :(得分:0)

如果您希望在同一组中的属性之间具有 OR 逻辑,并且在不同组中的属性之间具有 AND 逻辑,则应该:

  1. 转到“catalog \ model \ catalog”编辑product.php

  2. 您需要编辑的功能是public function getProducts($data = array(), $get_all = FALSE) {

  3. 在函数开头指定这些变量:$validimi = false; $filter_groups = array();

  4. 找到这段代码:

    if (!empty($data['filter_filter'])) {
                        $implode = array();
    
                        $filters = explode(',', $data['filter_filter']);
    
                        foreach ($filters as $filter_id) {
                            $implode[] = (int)$filter_id;
                        }
    
                        $sql .= " AND pf.filter_id IN (" . implode(',', $implode) . ")";
    

    }

  5. 并在$sql .= " AND pf.filter_id IN (" . implode(',', $implode) . ")";

    之前添加此内容
                $sql_check = "SELECT DISTINCT (filter_group_id) FROM  " . DB_PREFIX . "filter WHERE filter_id IN (" . implode(',', $implode) . ") ";    
                $query_check = $this->db->query($sql_check);
                $filter_groups = array();
                foreach ($query_check->rows as $result) {
                    $filter_groups[$result['filter_group_id']] = array();
                }
    
                if(count($filter_groups) > 1){
                    $validimi = true;               
                }else{
                    $validimi = false;
                }
    
  6. 最终在我指定的函数中找到这段代码:

    $ sql。=“GROUP BY p.product_id”;

  7. 并将其更改为:

      If( $validimi ) {
    

    $ sql。=“GROUP BY p.product_id HAVING COUNT(DISTINCT pf.filter_id)=”。count($ filter_groups);

        }else{
    
            $sql .= " GROUP BY p.product_id";
    
        }
    
  8. 现在尝试你的过滤器他们应该工作正常,这是我在我自己的商店创建和使用但使用opencart版本1.5.5.1,但我认为它也适用于你的情况。逻辑很清楚,以防这段代码对你有帮助,你可以使用逻辑创建自己的代码:)。

    希望我帮助过。