2015-03-30 62 views
0

我试图按类别过滤结果。 所以从下面MySQL过滤器产品分类AND&OR或

SELECT prod_id FROM ItemKeywords 
WHERE (keyword_id=96 OR keyword_id=96) /* Metal category */ 
AND keyword_id=55 /* Center category */ 

WHERE (Rose Gold OR White Gold) 
AND Princess Cut 

的ItemKeywords表这应该只拉起100657和102163

无论是玫瑰金或白金

但需要公主方形

== Keywords ========================== 
|keyword_id |KeywordName  |category 
| 55   | Princess Cut | Center 
| 96   | Rose Gold  | Metal 
| 102   | White Gold  | Metal 
| 88   | Platinum  | Metal 

== ItemKeywords ========================== 
|keyword_id |prod_id   |category 
| 96   | 100657   | Metal 
| 55   | 100657   | Center 
| 102   | 102163   | Metal 
| 55   | 102163   | Center 
| 88   | 100686   | Metal 
| 55   | 100686   | Center 

我试过这个

SELECT DISTINCT(p.prod_id), p.header, p.image 
FROM tblproducts AS p 
JOIN ItemKeywords AS k1 ON k1.prod_id=p.prod_id AND k1.keyword_id=96 OR k1.keyword_id=101 
JOIN ItemKeywords AS k2 ON k2.prod_id=p.prod_id AND k2.keyword_id=55 
WHERE p.active=1 

SELECT DISTINCT(p.prod_id), p.header, p.image 
FROM ItemKeywords AS k JOIN tblproducts AS p ON k.prod_id=p.prod_id 
WHERE p.active=1 AND p.retire=0 AND p.category_id=2 
AND k.keyword_id=55 AND k.keyword_id=102 OR k.keyword_id=101 

及其它。我似乎无法弄清楚这一点。

任何见识都会很棒。

感谢

+0

你需要在你的条件组,括号就像在你的顶部查询 – 2015-03-30 23:23:45

回答

0
  1. 既然你想有两种可能的“keyword_id”,你需要包括表ItemKeyWords两次在你的选择。一次用于金属类别,另一次用于中心类别。
  2. 接下来,您需要筛选WHERE子句中的结果。

SELECT DISTINCT(p.prod_id), p.header, p.image 
 
FROM tblproducts AS p 
 
JOIN ItemKeywords AS k1 ON k1.prod_id=p.prod_id 
 
JOIN ItemKeywords AS k2 ON k2.prod_id=p.prod_id 
 
WHERE p.active=1 AND p.retire=0 AND p.category_id=2 
 
AND (k1.keyword_id=96 OR k1.keyword_id=102) AND k2.keyword_id=55