2014-10-27 20 views
0

我有一個叫做產品領域的表ID,名稱,網址,品牌 然後,我有一個名爲product_filter與領域ID,PRODUCT_ID,TYPE字段,取值不正確的行通過網上商店的過濾器返回

讓我們假設我有以下產品表

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  

我用鮮明拿到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')  

但是我的成績都是那麼產品棉花或羊毛或下降。 如果有人有任何建議,想法然後請...

回答

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 
+0

謝謝Kickstart,這個工作! – PostMans 2014-10-28 20:21:37

相關問題