Open khanhicetea opened 9 years ago
Mị đã viết xong, mọi người test thử nhé :smile_cat: https://github.com/huynhtrucquyen0812/nested-set-model-with-sifoni
Nên remove $child_name
ra khỏi addNode($child_name, $parent_id, $position)
. Nói chung là những hàm xử lý NSM thì không nên care vào data của node làm gì :D
P/s : implement thử vào 1 trang nhé
Âu mai gót, ghi sai tên biến mất tiêu.. :sweat: Đã sửa
Cơ mà cái $child_name
chỉ là cái tên node của user nhập vào thôi mà a. Không cung cấp thì lấy gì add dữ liệu :sweat_smile:
à, thường thì sau khi set data xong thi nguoi ta sẽ chạy $node->addNode($parent_id, $postion)
lúc này các hàm NSM sẽ không còn dạng static
nữa
Update 18/11/15: Thêm các function mới theo yêu cầu ở mục cuối 'Thêm function' https://github.com/huynhtrucquyen0812/nested-set-model-with-sifoni
Chưa test nhưng có cố gắng đó :+1:
Nested Set Model
Giới thiệu
Bạn đang thiết kế 1 website hay 1 software có các chuyên mục đa cấp (có chuyên mục cha, con, cháu, chắt, chút, chít, v.v..). Làm sao để thiết kế CSDL để đạt sự tối ưu trong lưu trữ, truy vấn, chỉnh sửa đây ? Bài viết sẽ đưa ra 1 giải pháp hoàn toàn mới, và bạn sẽ thấy được tầm quan trọng của Cấu Trúc Dữ Liệu.
Các giải pháp truyền thống
parent_id
để lưu giá trị id của node cha ( parent_id = 0 khi node đó thuộc root - node 'ông tổ' ). Khi đó để lấy dữ liệu ra, phải dùng đệ quy để giải quyết => performance thấp.Giải pháp mới : Nested Set Model
Giải pháp mới này sử dụng cấu trúc cây dữ liệu như sau :
Cây dữ liệu sẽ có những thuộc tính như sau :
value
sẽ 2 giá trị làleft
vàright
(right
>left
). Ví dụ node A ( có left là 1, right là 8).left con
>left cha
ANDright con
<right cha
. Ví dụ C là con của A ( 2 > 1 AND 5 < 8 ) và F là con của B ( 10 > 9 AND 11 < 12 ).left
= 0 và đường đi tăng dần sẽ theo "từ trên xuống dưới, từ trái qua phải". Xem hình minh họa bên dưới để hiểu rõ hơn đường đi.left
vàright
của tất cả các node tạo thành 1 dãy số tự nhiên liên tục từ 0 đến (N*2 + 1) với N là tổng số node của cây ( không tính node root).Các bạn có thể giúp mình viết tiếp :