2011-09-28 88 views
2

我試圖從MySQL只有一個查詢獲得第一個類別(級別0,沒有父母)從一個子類別(可能是任何級別)。那可能嗎?PHP&MySQL - 只用一個查詢即可獲得頂級類別

下面是一個例子DB結構:

Table categories 

    id (INT 11) 
    parent (INT 11, zero if it has no parent) 
    name 

編輯:請問MPTT是一個容易解決的問題?

+0

'top'類是如何定義的?空父母? –

+0

@AleksG它被定義爲'0'(整​​數)。 – yoda

+1

我懷疑你不能用一個簡單的查詢來做到這一點。你應該可以編寫一個存儲函數來完成這個工作 - 然後使用代碼中的一個選擇來調用該函數。 –

回答

1

這是不可能的掃描無限的水平,只有一個查詢,但如果你確信你的categoies樹不走超過一定數量級別的更深一些,你可以使用這一招,這是4個級別:

SELECT COALESCE(c4.parent, c3.parent, c2.parent, c1.parent) 
FROM categories AS c1 
LEFT JOIN categories AS c2 ON(c1.parent = c2.id) 
LEFT JOIN categories AS c3 ON(c2.parent = c3.id) 
LEFT JOIN categories AS c4 ON(c3.parent = c4.id) 
WHERE c1.id = {someID}