我試圖做一個網站(PHP/MySQL的),用戶可以發表評論 或回覆已經發布者的註釋部分。我知道這樣做有點棘手,因爲 像MySQL這樣的RDBMS並不是真正用於存儲分層數據的。 我發現4個解決我的問題(鄰接表,路徑枚舉,嵌套集合和關閉表) 的我選擇了嵌套集合(改性預購樹的遍歷)。 我已經成功地使這項工作對拉動和排序根的意見和答覆 ,但我似乎無法找到一種方法來通過點(其它列)打破內部消除了 父>子鏈接的評論進行排序。訂購嵌套組的另一列(比LFT和RGT等)
想象一下,一個表是這樣的:
+-------------------------------+
| id | comment | lft | rgt | pts|
+-------------------------------+
+-------------------------------+
| 1 | abc | 1 | 8 | 3 |
+-------------------------------+
| 2 | 123 | 2 | 7 | 1 |
+-------------------------------+
| 3 | xyz | 3 | 4 | 5 |
+-------------------------------+
| 4 | www | 5 | 6 | 4 |
+-------------------------------+
| 5 | com | 9 | 10 | 9 |
+-------------------------------+
如果我爲了這個由 「LFT ASC」 我得到標準的時間順序(從舊到新):
(1) abc
--(2) 123
----(3) xyz
----(4) www
(5) com
如果orered「 rgt DESC「 我得到oposite即新的第一(最新到最舊):
(5) com
(1) abc
--(2) 123
----(4) www
----(3) wxy
所有這一切都像一個魅力。 問題是我似乎無法找到一種方法來按點排列評論。 最後,我想獲得的訂單是這樣的:
(5) com (9 pts)
(1) abc (3 pts)
--(2) 123 (1 pts)
----(3) xyz (5 pts)
----(4) www (4 pts)
有什麼辦法使嵌套集合模型這樣的表現。 如果possile,要做到這一點,最好的辦法是通過使用正確的查詢,但如果這樣的查詢不存在 用PHP命令他們也是可以接受的(如果它使用資源的合理ammout)。 如果這使用嵌套集合模型是不是合理,可能我想知道 使用哪種模式來產生所有訂購上述mentined的意見的方式。
爲什麼不只是存儲註釋的父ID的答覆是,然後使用PHP構建嵌套? – MetalFrog 2012-02-16 16:52:20
是什麼定義了家長評論與孩子評論? LFT和RGT指定什麼?您似乎錯過了最常用的存儲此類數據的方法......在子數據中指定父標識符,並將0用於沒有父項的數據。 – Fosco 2012-02-16 16:53:08
@Fosco我認爲你指的是從數據庫中提取數據時有缺點的鄰接表模型(它需要很多SELECT語句來拉一頁評論)。看到這個鏈接: http://www.sitepoint.com/hierarchical-data-database/ – Alternatex 2012-02-16 16:59:45