首页 > 解决方案 > Prestashop 模块 SQL 查询以从特定特征值中获取 id_products

问题描述

我目前正在使用 prestashop 上的一个名为“Leo Parts Filter”的模块,该模块在数据库“ps_leopartsfilter_product”中按品牌、型号、年份和设备对 id_products 进行排序。

当我在此表中调用具有 id_product 的设备时,prestashop 会显示此 id_product。

 public static $definition = array(
        'table' => 'leopartsfilter_product',
        'primary' => 'id_product',
        'multilang' => false,
    $sql = 'SELECT * FROM `' . _DB_PREFIX_ . 'leopartsfilter_product` WHERE 1=1 ';  
            
             if ($id_product != null && (int) $id_product) {
                $sql .= ' AND id_product =' . (int) id_product;
            }

我想改变调用 id_product 的方式,而不是按照这种方式只调用这个 id_product :

我想查询 feature_id = 212 和 feature_value_lang = id_product 的所有产品。

我尝试调整此查询,但无法使其正常工作(没有数据显示)

SELECT id_product, fl.name, value, pf.id_feature
                FROM '._DB_PREFIX_.'feature_product pf
                LEFT JOIN '._DB_PREFIX_.'feature_lang fl ON (fl.id_feature =212 AND fl.id_lang = '.(int)$context->language->id.')
                LEFT JOIN '._DB_PREFIX_.'feature_value_lang fvl ON (fvl.id_feature_value = pf.id_feature_value AND fvl.id_lang = '.(int)$context->language->id.')
                LEFT JOIN '._DB_PREFIX_.'feature f ON (f.id_feature = pf.id_feature)
                '.Shop::addSqlAssociation('feature', 'f').'
    
    WHERE fvl.`value` =  '['id_product']'
    GROUP BY id_product
    ORDER BY f.position ASC
    ';

我不擅长 SQL,所以不要怪我,我通过自己的方式学到了一切,并且我尝试建立自己的公司网站,这个模块就是我需要完成的全部。

如果有人想要一些钱来寻求帮助,我愿意给予奖励以使其发挥作用。

谢谢

标签: sqldatabaseprestashop

解决方案


您的第二个查询与 Leo Parts Filter 模块无关,因为它只查询原生 Prestashop 功能表,而不是 Leo 模块本身的那些,所以您的请求不是很清楚。

如果你需要依赖基本特征,你必须清楚id特征/id特征值和id产品之间的关系都在ps_feature_product表中,所以如果你想要id_feature_value = 212的产品你只需要一个简单的

SELECT id_product FROM ps_feature_product WHERE id_feature_value = 212;

推荐阅读