2010-01-23 70 views
0

我有以下表格:的MySQL查詢的產品,只有當他們出現在某些類別表

Products: 
    id, name, ... 

Products_in_Categories 
    id, category_id, product_id 

Categories 
    id, name, ... 

我有我想要讓他搜索產品按名稱的管理頁面,目錄編號等等。當然,按類別和名稱以及目錄編號...

所以沒有類別 - 這很容易。但是當我想讓搜索只能提取與所選類別相關的產品信息時 - 我無法弄清楚。

我使用一些舊的方法,或者這是存儲它的方式嗎?我知道並使用序列化和反序列化,但我不想在這裏使用它。

任何幫助將非常感激,謝謝!

+0

目錄的作用是什麼?它與類別相同嗎? – Eimantas 2010-01-23 17:51:12

+0

它不一樣,它只是一個用戶自定義輸入字段(varchar)。 – 2010-01-23 18:19:10

+0

我重新格式化了你的問題,希望對你有好處。 – 2010-01-23 18:39:35

回答

1

存儲產品的方式沒有任何問題,這三個表格是存儲這種關係的正確方式。

SELECT * 
FROM Categories c 
JOIN Products_in_Categories pic ON (pic.category_id = c.category_id) 
JOIN Products p ON (p.id = pic.product_id) 
WHERE c.name = 'YOUR_CATEGORY_NAME'; 

用您搜索的類別名稱替換YOUR_CATEGORY_NAME。如果您希望用戶只能輸入名稱的一部分,請將WHERE c.name = 'YOUR_CATEGORY_NAME';替換爲

WHERE c.name LIKE '%CATEGORY_NAME_PART%; 
+0

謝謝! 哇!它非常棒! 非常感謝 - 我要深入研究這個領域。 你對mysql書有什麼好建議嗎? – 2010-01-23 18:57:31

0
SELECT p.* FROM products as p 
LEFT JOIN Products_in_Cateogries pc ON pc.product_id = p.id, 
LEFT JOIN Categories c ON c.id = pc.categroy_id 
WHERE c.name = 'CATEGORY A' 

因爲category_id和product_id的組合是唯一的,所以你也不需要在Products_in_Categories表中有一個id。

+0

謝謝。 我無法真正理解這個查詢,但我會爲你寫的內容挖掘更多。當我「按原樣」使用它時,它說我有錯誤,除了CATEGORY A之外,是否需要更改任何內容? – 2010-01-23 18:21:05

相關問題