Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php webshop筛选器返回的行不正确_Php_Mysql_Filter_Webshop - Fatal编程技术网

Php webshop筛选器返回的行不正确

Php webshop筛选器返回的行不正确,php,mysql,filter,webshop,Php,Mysql,Filter,Webshop,我有一个名为products的表,其中包含ID、NAME、URL和BRAND字段 然后我有一个名为product_filter的字段,其中包含字段ID、product_ID、类型和值 假设我有下面的产品表 1 |产品1 |产品1 |品牌1 2 |产品2 |产品2 |品牌2 3 |产品3 |产品3 |品牌1 以及产品过滤器表 1 | 1 |材料|羊毛 2 | 1 |材料|棉 3 | 2 |材料|棉 4 | 3 |材料|羊毛 5 | 1 |季节|秋季 5 | 2 |季节|秋季 5 | 1 |季节|所

我有一个名为products的表,其中包含ID、NAME、URL和BRAND字段 然后我有一个名为product_filter的字段,其中包含字段ID、product_ID、类型和值

假设我有下面的产品表

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

以及产品过滤器表

1 | 1 |材料|羊毛
2 | 1 |材料|棉
3 | 2 |材料|棉
4 | 3 |材料|羊毛
5 | 1 |季节|秋季
5 | 2 |季节|秋季
5 | 1 |季节|所有

等等

现在,当客户出现在网页上并试图进行筛选时

材料:羊毛、棉花 季节:秋季

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

我试了一下

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')    

然而,我的结果是,然后产品与棉花或羊毛或秋天。
如果有人有建议,请想法…

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

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,这就行了!
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