2012-01-11 36 views
1

我將如何返回與查詢結果相關的所有類別ID?根據結果消除空的類別?

items_cats: (many to many) 
product_id | category_id 
==================== 
1   | 1 
1   | 2 
1   | 4 
1   | 7 

2   | 1 
2   | 3 
2   | 4 
2   | 7 

3   | 1 
3   | 3 
3   | 4 
3   | 8 

在下面的查詢我得到的所有產品ID的包含CATEGORY_ID 3和CATEGORY_ID 7
但我也想知道這CATEGORY_ID的(選擇)仍然有producs_id對選擇的基礎:

例如我喜歡返回(基於代碼示例)該查詢:
-product_id = 2
-category_id的:7,3,4,1

當使用此我可能會喜歡limet查詢爲每頁最多項目。

代碼我; VE這麼遠:

SELECT 
     DISTINCT t1.product_id, t1.category_id 
    FROM 
     items_cats t1 
    INNER JOIN 
     items_cats t1b 
     ON t1.product_id =t1b.product_id 
    WHERE 
     t1.category_id=3 AND 
     t1b.category_id=7 

問題在貓ID的寬鬆查詢:

SELECT 
     e1.category_id 
    FROM 
     drinks_ingredients e1  
    WHERE 
     e1.category_id=2 

當然它返回2,但我喜歡它返回1,2, 4,7.

圍繞着工作的另一種方式,但是我怎樣才能使很多產品和類別的效率更高?我可以將這些查詢結合起來嗎?

SELECT DISTINCT 
     t1.category_id 
    FROM items_cats t1 
    WHERE t1.product_id = 2 
+0

這是什麼'iid'列? – 2012-01-11 12:54:22

+0

是一個錯誤將它改爲它應該是的 – Hank12312 2012-01-11 14:03:14

回答

1

我確定還有其他方法可以做到這一點,但這裏是一個。

首先,我們需要找出哪些product_id小號我們感興趣的是你可以指望有多少所需的類別當中的每product_id是在:

SELECT product_id, count(category_id) as numcats 
FROM items_cats 
WHERE category_id IN (3,7) 
GROUP BY product_id; 
+------------+---------+ 
| product_id | numcats | 
+------------+---------+ 
|   1 |  1 | 
|   2 |  2 | 
|   3 |  1 | 
+------------+---------+ 

因爲我們指定的兩個category_id(3和7 ),我們只對product_id感興趣,其中count(category_id) = 2。所以需要添加HAVING numcats=2到最後:

SELECT product_id, COUNT(category_id) as numcats 
FROM items_cats 
WHERE category_id IN (3,7) 
GROUP BY product_id 
HAVING numcats=2; 
# (returns all product_id with both category_id=3 and 7. 

因此,這裏有所有我們想要的category_id S爲product_id秒。 然後,我們只是選擇所有category_id其中product_id是在上表中:

SELECT DISTINCT category_id 
FROM items_cats 
WHERE product_id IN 
    (SELECT product_id 
    FROM items_cats 
    WHERE category_id IN (3,7) 
    GROUP BY product_id 
    HAVING COUNT(category_id)=2); 

+-------------+ 
| category_id | 
+-------------+ 
|   1 | 
|   3 | 
|   4 | 
|   7 | 
+-------------+ 
+0

坦克你的解決方案。我去了做一些性能測試。你會認爲使用嵌套集合db設計可以加快查詢的時間嗎? – Hank12312 2012-01-11 14:02:28

+0

不幸的是,我不知道關於數據庫設計模型的任何性能:( – 2012-01-11 23:16:21