2016-11-12 107 views
-1

我有兩個表:一個包含產品,第二個包含類別。我希望能夠按類別進行搜索,以便在父類別中搜索時,它將搜索父類別和子類別。搜索類別和子類別

我的目標: 請在「汽車」的搜索將>>雪佛蘭搜索和豐田

我怎樣才能實現這個結果?

mysqli_query($conn,"select * from cat where parent=''"); 

mysqli pic

+0

請參閱http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple- sql-query – Strawberry

回答

0

既然你沒有表現出你的表結構,我鑼做出一些猜測。我也希望這個答案不是太簡單,但沒有更多的繼續,似乎你正在尋找基本的想法。

假設您的示例中的「cars」在類別表中,「chevrolet」和「toyota」在產品表中,那麼您需要在產品表中指定另一個欄,說明每個產品的類別。

所以如果你有一個類別表所示:

cat_id | cat_name 
----------------- 
    1 | cars 
    2 | appliances 

,你有一個產品表所示:

product_id | product_name | cat_id 
---------------------------------- 
    1  | chevrolet | 1 
    2  | kitchenaid | 2 
    3  | toyota  | 1 

重要的是,在產品表中的每個項目都有一個參考類別是什麼。這就是關係數據庫所做的:它們提供了一種顯示不同實體之間關係的方式。

然後得到的所有產品類別中的「車」的列表,你只需要在適當的類別來選擇的:

SELECT product_name from products WHERE cat_id = 1; 

如果您還希望包括從類別表信息在你的結果,你可以加入表:

SELECT product_name, cat_name from products 
    JOIN categories ON products.cat_id = categories.cat_id 
    WHERE categories.cat_id = 1 

這將讓你的結果:

product_name | cat_name 
------------------------ 
    chevrolet | cars 
    toyota  | cars 

在某些情況下,將類別和產品放在同一個表格中是有意義的(例如,如果您想要具有任意深度值的樹,例如'雪佛蘭'是父'volt','impala'等)。

同樣的查詢仍然有效,但現在你本身加入表(我使用基於下面的評論列名):

SELECT child.name, parent.name 
    FROM products AS parent 
    JOIN products AS child ON parent.id = child.parent 
    WHERE parent.id = 1 

這將讓你幾乎相同的結果如上。雖然它是連接到它自己的同一張表,但我使用AS來區分這兩個引用。

+0

親愛的傑裏 我有類別表https://i.stack.imgur.com/f6cI1。png 我需要做搜索引擎,當我在父類別中搜索父類別 –

+0

的子類別時,確定,假設有類別和產品在同一個表中的原因,查詢實際上沒有太大變化。不同之處在於,不是將兩個表連接在一起,而是將自己與表連接起來。我會在我的回答中加入一個快速補充。 – Jerry

+0

親愛的 這項工作選擇的類別,但我想進行選擇和搜索,當我選擇主要類別搜索將運行在此 的所有子類別上我試圖做到這一點,但沒有機會 –