![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 4.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam wszystkich,
Piszę aplikację w której do nawigacji chciałem skorzystać z dowolnej ilości kategorii i subkategorii. Czyli struktua drzewiasta implementowana za pomocą tabel MySQL - pykuś. Owszem, jeśli się to zrobi w prostacki sposób zakładając tabelę trzykolumnąwą Id, categoryName i parentId. Wtedy żeby wyświetlić drzewo trzeba wykonywać wiele zapytań do bazy co jest szalenie nieefektywne. Znalazłem implementację drzewa w tabelach bazy w inny sposób, lepszy pod względem wydajności, wystarczy bowiem jedno zapytanie. (Tutaj) Tylko teraz mam pytanie, jak przesuwać elementy w drzewie ? Zrozumiale dla mnie jest że należy zmieniać wartości kolumn Left i Right, ale za cieńki jestem z MySQL żeby sensowne zapytanie w tym celu ułożyć. Bardzo proszę o pomoc, siedziałem nad tym przez święta, ale za nic na świecie mie nie wychodzi. Pozdrawiam |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 4.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję, ale chyba nie przeczytałeś dokładnie artykułu.
W implementacji drzewa o której mowa, nie ma kolumny parent. Są tylko kolumny "left" i "right" wyznaczające pozycję elementu w drzewie. Gdy wstawiasz pierwszy element do drzewa nadajesz mu wartości left1, right=2. Gdy wstawiasz drugi element nadajesz mu left=2, right3, pierwszy right poprawiasz na 4. Gdy wstawiasz trzeci element nadajesz mu left=3, right4, drugi right poprawiasz na 5, a trzeci right na 6. itd. Teraz chcąc wygenerować drzewo od np stopnia drugiego w głąb, pobierasz wszystkie elementy o left >2 jednym zapytanie,. Możesz również jednym zapytaniem pobrać równocześnie poziom zagnieżdżenia każdego elemetu i tym podobne. Problem mam w momencie gdy chcę zamienić dane miejscami. Pozdrawiam |
|
|
![]() ![]() |
![]() |
Aktualny czas: 9.10.2025 - 05:09 |