2011-09-01 73 views

回答

1

是的,你可以這樣做私生子:

ORDER BY CASE parentid WHEN 0 THEN id ELSE parentid END ASC, id ASC 

我說這是一個私生子,因爲它需要爲每一個單列計算。它不會高性能。解決這個問題的更好方法是使用更好的數據模型。您也可以使用Nested Set Model來存儲,而不是僅存儲父標識。所以基本上你的數據模型看起來像:

id | parentid | name | left | right 
1 | 0  | Peter | 1 | 4 
2 | 0  | Marcus | 5 | 8 
3 | 1  | Monica | 2 | 3 
4 | 2  | Sergei | 6 | 7 

現在,這一說法,您的訂單將減少到:

ORDER BY `left` ASC 

哪會做同樣的事情。給這個嵌套的文章一個讀。有更好的方法來解決這個問題,而不僅僅是清除,如果你需要從過濾或排序中獲取數據...

+0

謝謝。你的回答非常有幫助! – Memochipan

+0

最後我只介紹了'排序'列而不是'左'和'右'列。 – Memochipan

+0

我還發現這個非常有趣的文章:http://sqllessons.com/categories.html使用鄰接列表模型。 – Memochipan