【问题标题】:Incorrect rows returned by webshop filter网店过滤器返回的行不正确
【发布时间】:2014-10-27 14:40:17
【问题描述】:

我有一个名为 products 的表格,其中包含 ID、NAME、URL、BRAND 字段 然后我有一个名为 product_filter 的字段,字段 ID、PRODUCT_ID、TYPE、VALUE

假设我有以下产品表

1 |产品 1 |产品-1 |品牌1
2 |产品 2 |产品-2 |品牌 2
3 |产品 3 |产品-3 |品牌1

和 product_filter 表

1 | 1 |材料 |羊毛
2 | 1 |材料 |棉
3 | 2 |材料 |棉
4 | 3 |材料 |羊毛
5 | 1 |季节 |秋天
5 | 2 |季节 |秋天
5 | 1 |季节 |全部

等等等等

现在当客户在网页上并尝试过滤时

材质:羊毛、棉 季节:秋天

我的结果是产品 1(有材料和正确的季节)和产品 2(有 1 材料和正确的季节)。

我尝试了加入这个方法

SELECT DISTINCT(shop_product.product_number), `shop_product`.`color_count`, `shop_product`.`category_id`, `shop_product`.`in_stock`, `shop_product`.`url_image`, `shop_product_description`.* FROM (`shop_product`) JOIN `shop_product_description` ON `shop_product`.`id` = `shop_product_description`.`product_id` JOIN `shop_category_description` ON `shop_product`.`category_id` = `shop_category_description`.`category_id` INNER JOIN `shop_filters` ON `shop_product`.`id` = `shop_filters`.`product_id` WHERE `shop_product`.`status` = 1 AND `shop_product_description`.`language_id` = '1' AND `shop_category_description`.`language_id` = '1' AND ( (shop_filters.type = '1' AND shop_filters.keyword = 'cotton') OR (shop_filters.type = '1' AND shop_filters.keyword = 'wool') ) AND (shop_filters.type = '2' AND shop_filters.keyword = 'fall') ORDER BY shop_product`.`url_image` asc, `shop_product_description`.`name` desc LIMIT 36    

我使用 Distinct 来取回 1 个 oer 产品(因为产品 1 具有两种材料)。

但是在我改变之前我没有得到任何结果

( (shop_filters.type = '1' AND shop_filters.keyword = 'cotton') OR (shop_filters.type = '1' AND shop_filters.keyword = 'wool') ) AND (shop_filters.type = '2' AND shop_filters.keyword = 'fall')    

( (shop_filters.type = '1' AND shop_filters.keyword = 'cotton') OR (shop_filters.type = '1' AND shop_filters.keyword = 'wool') ) OR (shop_filters.type = '2' AND shop_filters.keyword = 'fall')    

但是,我的结果是棉或羊毛或秋季的产品。 如果有人有建议,那么请提出想法...

【问题讨论】:

    标签: php mysql filter webshop


    【解决方案1】:

    您需要多次匹配过滤器表,以检查每个过滤器。最简单的可能是进行多个连接。

    SELECT DISTINCT(shop_product.product_number), shop_product.color_count, shop_product.category_id, shop_product.in_stock, shop_product.url_image, shop_product_description.* 
    FROM (shop_product) 
    JOIN shop_product_description ON shop_product.id = shop_product_description.product_id 
    JOIN shop_category_description ON shop_product.category_id = shop_category_description.category_id 
    INNER JOIN shop_filters sf1 ON shop_product.id = sf1.product_id 
    INNER JOIN shop_filters sf2 ON shop_product.id = sf2.product_id 
    WHERE shop_product.status = 1 AND shop_product_description.language_id = '1' 
    AND shop_category_description.language_id = '1' 
    AND ( (sf1.type = '1' AND shop_filters.sf1 = 'cotton') OR (sf1.type = '1' AND sf1.keyword = 'wool') ) 
    AND (sf2.type = '2' AND sf2.keyword = 'fall') 
    ORDER BY shop_product.url_image asc, shop_product_description.name desc LIMIT 36
    

    【讨论】:

    • 感谢 Kickstart,这可以完成工作!
    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多