2009-09-29 21 views
5

Trong MySQL, tôi lưu trữ loại theo cách này:Tạo breadcrumbs các loại lưu trữ trong MySQL

loại: - category_id - CATEGORY_NAME - parent_category_id

Điều gì sẽ là cách hiệu quả nhất để tạo ra các đường mòn/breadcrumb cho một category_id nhất định?

Ví dụ breadcrumbs (category_id): chung> Sub 1> Sub 2

Có thể có trong các lý thuyết mức không giới hạn. Tôi đang sử dụng php.

CẬP NHẬT: Tôi đã xem bài viết này (http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/) về Mô hình tập hợp lồng nhau. Có vẻ thú vị, nhưng trước đây bạn sẽ làm cách nào để quản lý động danh mục? Có vẻ dễ dàng hơn trên giấy, như khi bạn biết trước các danh mục, nhưng không phải khi người dùng có thể tạo/xóa/chỉnh sửa danh mục khi đang bay ... Bạn nghĩ sao?

+1

Truy vấn phân cấp trong MySQL: http://explainextended.com/2009/03/17/hierarchical-queries-in-mysql/ –

Trả lời

0

Tạo tệp đó (tuy nhiên bạn thích) từ mô hình cha mẹ truyền thống và lưu vào bộ nhớ cache. Đó là quá đắt để được tạo ra nó trên bay và những thay đổi cho hệ thống phân cấp thường là một số đơn đặt hàng của cường độ ít thường xuyên hơn so với những thay đổi khác bao giờ hết. Tôi sẽ không bận tâm với mô hình bộ lồng nhau vì hệ thống phân cấp sẽ thay đổi và sau đó bạn phải lừa dối xung quanh với các quyền và các quyền. (Lưu ý rằng bài viết chỉ bao gồm các công thức nấu ăn để thêm và xóa - không tái bố mẹ - điều này rất đơn giản trong mô hình gốc).

1

Tôi thích sử dụng phương pháp Materialized Path vì nó chứa đường dẫn đường dẫn của bạn và dễ dàng thực hiện những việc như chọn tất cả con cháu của nút mà không sử dụng truy vấn đệ quy.

mô hình con đường cụ thể hóa

Ý tưởng với mô hình con đường vật hoá là liên kết mỗi nút trong hệ thống cấp bậc với vị trí của nó trong cây. Điều này được thực hiện với một danh sách nối của tất cả các tổ tiên của các nút. Danh sách này thường được lưu trữ trong một chuỗi phân tách. Lưu ý trường "Linage" bên dưới. CAT_ID NAME CAT_PARENT Lineage 1 Home . 2 product 1 .1 3 CD’s 2 .1.2 4 LP’s 2 .1.2 5 Artists 1 .1 6 Genre 5 .1. 5 7 R&B 6 .1. 5.6 8 Rock 6 .1. 5.6 9 About Us 1 .1

Vượt qua bàn

Select lpad('-',length(t1.lineage))||t1.name listing 
From category t1, category t2 
Where t1.lineage like t2.lineage ||'%' 
    And t2.name = 'Home'; 
Order by t1.lineage; 

Liệt kê

Home 
-product 
–CD’s 
–LP’s 
-Artists 
–Genre 
—R&B 
—Rock 
-About Us 
+0

Liên kết đã chết – lapin

+0

@ lapin hoạt động đối với tôi, nội dung được thêm ở trên – RedFilter

0

Vẻ đẹp của bộ lồng nhau là bạn có thể dễ dàng thêm/gỡ bỏ các nút từ biểu đồ chỉ với một vài câu lệnh SQL đơn giản . Nó thực sự không phải là tất cả những gì đắt tiền, và có thể được mã hóa khá nhanh chóng.

Nếu bạn tình cờ sử dụng PHP (hoặc thậm chí nếu bạn không), bạn có thể xem mã này để xem triển khai khá đơn giản adding nodes to a nested set model (archive.org backup). Việc xóa (hoặc thậm chí di chuyển) cũng tương tự đơn giản.

+0

Liên kết đã chết – lapin

+0

@lapin - Đã thêm liên kết archive.org của liên kết chết. – timdev

Các vấn đề liên quan