2011-09-06 69 views
0

我有這張表。mysql,從表中選擇全部

我想選擇cat id = 4,並且每隔一行它的cat parent id等於。 例如如果我想從貓ID 4所有類別,它應該導致貓IDS 4(本身),2和1

+-------------------------------+ 
| id | catname | catparentid | 
+-------------------------------+ 
|1  | home  | 0  | 
|2  | products | 1  | 
|3  | men  | 2  | 
|4  | women | 2  | 
|5  | shirts | 3  | 
|6  | outdoor | 0  | 
+-------------------------------+ 

我想:

SELECT * FROM categories c 
where c.id = 4 
c.catparentid IN (SELECT id FROM categories) 

但它帶來了一切。我需要做一個工會嗎?

+1

你在尋找什麼樣的深度?如果它遞歸地繼續找到任何匹配的東西,或者它應該只找到2-3級... –

+0

本文有一些信息可能會對您有所幫助:[管理MySQL中的分層數據](http://www.vbmysql。 com/articles/database-design/managing-hierarchical-data-in-mysql) – Mat

+0

儘可能多的直到它等於0 –

回答

0
SELECT * 
FROM categories c 
INNER JOIN (SELECT catparentid FROM categories where id = 4) a 
ON c.catparentid = a.catparentid 
+0

試過這個,沒有工作 –

+0

我現在看到你需要一些遞歸解決方案。我的查詢當然不起作用。 – curlingdude

0

聯盟在這裏沒有幫助,因爲你不知道你需要多少聯盟(樹的深度)。

較新的SQL標準支持傳遞閉包的計算,我想使用WITH,但我不知道當前SQL服務器有多少支持。