2011-09-27 121 views
0

我有其中有幾個表的數據庫。爲了舉例,我將簡化它並嘗試詳細解釋。MySQL:從多個表中選擇DISTINCT

一臺被稱爲產品,另一個叫品牌,最後一個被稱爲類別。

正如你可能猜到了每個產品可以有分配只有一個類別。另外,每個產品只能分配一個品牌。這些是關係。

所以,在一個頁面上我作爲參數傳遞我對細節的頁面,在這裏我列出了從具體品牌所有的產品與品牌的聯繫。在該頁面上,我還按類別篩選,只篩選來自所選品牌的產品。

E.g.索尼 - >然後從下拉過濾器應用是索尼品牌dSLR相機產品的結果。

我想是有類別進行篩選,因此,如果品牌不必須具體類別它並不甚至上下拉過濾器顯示。

E.g.分類預定義爲:數碼單反,視頻,手機,鞋

索尼有產品的負荷,但犯規讓鞋子,所以我想,我們將會從細節頁面上的過濾器列表中排除。

希望你明白我想在這裏...

任何建議多於歡迎:)

回答

1

好一個INDEX加快步伐,你應該能夠加入三個表像這樣:

SELECT DISTINCT c.category_id, c.category_name 
FROM products p 
JOIN categories c ON p.category_id = c.category_id 
JOIN brands b ON p.brand_id = b.brand_id 
WHERE b.brand_name='Sony'; 

,然後顯示產品,像這樣:

SELECT p.product_id, p.product_name 
FROM products p 
JOIN categories c ON p.category_id = c.category_id 
JOIN brands b ON p.brand_id = b.brand_id 
WHERE b.brand_name='Sony' AND c.category_id='1234'; 

正如danishgoel已經提到的那樣,請確保您的表格上有適當的索引,因爲這是一個相當昂貴的查詢。

+0

謝謝,這應該是它! – user966456

0

的一種方法是,選擇不同類別從一個特定品牌的產品清單。

你可以不喜歡它:

SELECT DISTINCT(cat_id) FROM PRODUCTS WHERE brand_id = 'sony' 

現在你只有那些可用於sony產品

類別上面的查詢可能會有點慢,在每個頁面請求運行。您可以通過創建brand_id, cat_id

+0

也許我還不夠清楚。我需要SQL查詢將填充該過濾器的下拉框。 分類 - > cat_id,cat_name所以與我填充下拉列表,當你選擇下拉,你可以過濾索尼品牌的某些類別... – user966456