![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 375 Pomógł: 20 Dołączył: 28.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Potrzebuję wydajnego i niezbyt skomplikowanego sposobu na szybkie pobieranie danych o kategoriach - takiego, aby zmiana struktury kategorii nie była skomplikowana.
Aktualne rozwiązanie Ważne pola w tabeli: ID | nazwa | wyższa kategoria + bardzo szybkie wyszukiwanie kategorii niższego poziomu i wyższego o 1 poziom + nieskomplikowana struktura (przy zmianach nie trzeba wykonywać innych czynności) Rozwiązania problemów:
Ciekawa metoda, jednak prawdopodobnie nie da się pobrać wyższych kategorii przy pomocy 1 prostego zapytania do bazy. Doskonale się jednak sprawdza przy pobieraniu podkategorii. Powiązania - metoda Depesza Również ciekawe rozwiązanie - przy małej ilości poziomów rozmiar drugiej tabeli nie powinien urosnąć do kosmicznych rozmiarów. ![]()
Jeżeli kategoria ma subkategorię o ID 8, jej indeks to: 008.001 (ostatni człon to numer kolejności) bądź 008. + bezproblemowe i szybkie sortowanie i grupowanie kategorii Pobieranie podkategorii i nadkategorii jest możliwe, lecz wymaga użycia operatora LIKE lub specjalnej funkcji, więc prawdopodobnie nie jest tak szybkie. Podobnie wykonywanie operacji (ad. 5.) opera się na tej samej zasadzie. Zmiana struktury może być kłopotliwa (ale nie musi) - trzeba pozamieniać podkategoriom indeksy. Które z tych rozwiązań najlepiej nadaje się do podanych wyżej celów i nie jest uciążliwe przy modyfikacji struktury? ![]() Ten post edytował WebCM 15.07.2007, 11:58:29 -------------------- „Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 493 Pomógł: 0 Dołączył: 14.06.2003 Skąd: Tomaszów Lubelski/Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
No to jak z ta dyskusją
![]() -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 375 Pomógł: 20 Dołączył: 28.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Na końcu wybrałem nested sets, gdy przeczytałem więcej na ten temat. Wcześniej zacząłem implementować materialized path (IP), lecz przy sortowaniu występuje problem:
1.5.9 i 1.5.10 - który najpierw? Teraz męczę się z przenoszeniem kategorii w Nested Trees. Jeśli macie namiary na gotowe algorytmy, piszcie. Chyba, że są lepsze metody. Ten post edytował WebCM 4.08.2007, 20:28:08 -------------------- „Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 493 Pomógł: 0 Dołączył: 14.06.2003 Skąd: Tomaszów Lubelski/Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
No ja sie zabierałem i nie moglem sie zebrac. Az do dzisiaj. Przysiadlem porzadnie i napisalem
![]() ![]() Jak już skoncze calkowicie to nie omieszkam sie podzielić ![]() Ten post edytował menic 8.08.2007, 21:40:16 -------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 597 Pomógł: 30 Dołączył: 19.02.2003 Skąd: Tychy Ostrzeżenie: (0%) ![]() ![]() |
Osobiście używam tylko nested tree
![]() -------------------- Zapraszam na mój php blog, tworzenie stron.
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 219 Pomógł: 5 Dołączył: 18.07.2006 Skąd: Piekary Śląskie Ostrzeżenie: (0%) ![]() ![]() |
Ja też używam nested tree. Łatwo można na tym zrealizować wszystko co może być do szczęścia potrzebne. Znalazłem tylko jeden problem.
Na stronie http://www.phpriot.com/d/articles/php/appl...es-1/index.html jest opis algorytmu nested tree i aby wyświetlić cale drzewo to wykonujemy zapytanie select * from tabela order by nleft. Problem polega na tym, że nie mamy tutaj mozliwości wpływania na kolejność kategorii. Nie możemy raz wyświetlać elementów posortowanych po nazwie a raz po jakiejś ustalonej przez usera kolumnie. Dla każdej opcji sortowania trzeba by mieć osobne pola nleft i nright. -------------------- CMS dla Twojej firmy
Wojciech Małota |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 375 Pomógł: 20 Dołączył: 28.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Potrzebuję skryptu, który ustawi automatycznie pola left i right na podstawie:
Kod ID | ID wyższej kategorii http://pastebin.4programmers.net/2953 - ta funkcja zajmuje się ponownym zapisem ilości pozycji w kategoriach. Czy dałoby się podpiąć tutaj również uaktualnianie tych pól? Funkcja: - pobiera wszystkie kategorie z bazy - liczy zawartość (I FOR) - iteruje po każdej kategorii (II FOR) --- wyszukuje "rodziców" i dodaje im swoją liczbę pozycji (WHILE) Jeśli nie da się podpiąć tego, dobra będzie też osobna funkcja (a może nawet lepiej?). Tylko w jaki sposób napisać odpowiedni algorytm? Najlepiej, by nie wykonywał osobnego zapytania dla każdej kategorii jak w przykładzie na SitePoint. LEFT oznacza też kolejność (zapytanie do wyświetlenia listy kategorii zawiera: ORDER BY left), choć przebudowa ewentualnie może opierać się na tytułach (alfabetycznie). -------------------- „Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.07.2025 - 05:40 |