2013-07-21 85 views
0

我正在從零開始使用PHPMYSQL從事電子商務網站。我有一個類別表,其中一列爲ID,一列爲Parent_ID嘗試獲取父ID的父ID

當在categories.php上顯示產品時,我將其設置爲顯示產品,其中Parent_IDID等於$_GET['id']字段。但是現在我遇到了一個問題。

在我的「雜貨」的範疇,我有「清潔&家」子類別和「清潔&家」在我有幾個類別,如「洗衣」,「衛浴用品」等

我的問題第三級的產品不會顯示在「雜貨」類別中,因爲從技術上講,「洗衣店」的父母ID是「清潔&主頁」。永遠不會超過三個級別(父母,孩子,孫子),但我希望孫子級別中的類別也顯示在父級別中。

我已經嘗試通過MYSQL文檔和其他論壇,但迄今沒有運氣。

+0

你知道潛在水平的數量嗎?如果是這樣,你可以自我反覆加入表格本身。如果沒有,你需要看看使用動態SQL。關於它的很多例子。另一方面,如果你是從頭開始創建它,考慮研究'嵌套集合模型' - 對於這種類型的事情更容易。 – sgeddes

回答

0

這需要一對夫婦的加入讓頂端父:

select c.*, 
     coalesce(cp2.id, cp.id, p.id) as MostParentId 
from categories c left outer join 
    categories cp 
    on c.parent_Id = cp.id left outer join 
    categories cp2 
    on cp.parent_id = cp2.parent_id 
where c.id = $_GET['id'] or cp.id = $_GET['id'] or cp2.id = $_GET['id']; 

然後,您可以比較使用orid■對於比賽進行到父類別,子類別,或什麼的。

+0

嵌套集對於在SQL中存儲層次結構可能非常有用:http://stackoverflow.com/questions/192220/what-is-the-most-efficient-elegant-way-to-parse-a-flat-table-into -a-tree – user4035

+1

@ user4035。 。 。嵌套/閉合表很值得了解。但是,行動計劃明確指出,最多隻有三個級別的類別。這不需要一個通用的解決方案,特別是需要一組複雜的觸發器來保持數據完整性的解決方案。 –