2012-05-03 67 views
2

我有一個名爲「category」的mysql表。基本結構看起來像這 -用mysql中的單個查詢獲取子類別的父名稱

------  --------  ------ 
cat_id  cat_name  parent 
------  --------  ------ 
1   test1  NULL 
2   test2  NULL 
3   test3  2 
4   test4  1 
5   test5  3 

現在我想所有在單個查詢父類(不僅是ID)的類別數據。那可能嗎?我可以通過在while循環中使用第二個查詢(獲取孩子的父母名稱)並將數據作爲一個整體進行合併。但是可以用單個查詢來做到這一點嗎?

+0

你的問題是不明確的:你想選擇所有的類別數據和父類別的名稱,或者你想選擇所有具有給定(搜索)的父類別名稱的類別數據? – Konerak

+0

2件事情是一樣的。不是。 –

回答

6

加入表格,使用parent列鏈接到父級的cat_id。

SELECT c1.cat_id as childID, c1.cat_name ChildName, c2.cat_name as ParentName 
from category c1 
LEFT OUTER JOIN category c2 
ON c1.parent = c2.cat_id 
  • 小心:因爲一些元素沒有父母(NULL),我把LEFT OUTER JOIN所以那些行被顯示出來。如果您不想要 ,請使用JOIN而不是LEFT OUTER JOIN
  • 您也可以使用COALESCE顯示行,但顯示其他內容(空或 文本或...)而不是NULL
  • 你可以把結果作爲一個(大)新表,所以你可以添加WHERE子句,你通常會做,例如父名過濾:WHERE c2.cat_name = 'test2'
+0

這太棒了。非常感謝。也爲有用的提示。 –

0
Select p.cat_id, p.cat_name, c.cat_id, c.cat_name, c.parent 
From category Left Join category On p.cat_id = c.parent 
Where p.cat_name = 'name' 
0

SELECT C1。 category_name作爲類別,c2。 category_name AS sub_category FROM(

SELECT * FROM category )AS C1 INNER JOIN(

SELECT * FROM category )AS C2 C1上。 category_id = c2。 category_id

相關問題