![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 14.07.2009 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
Witam. Próbowałem sam wymyślić na to sposób jednak mi się nie udało. Mam tabelę "kategorie", w której ma strukturę:
Cytat ID | Name | isParent | parentID | Position Pole "Position" służy do sortowania elementów wewnątrz tego samego rodzica, polem "isParent" sprawdzam czy dany element ma potomków a pole "parentID" to wiadomo. Mój problem polega na tym że nie wiem jak jednym zapytaniem (lub jak najmniejszą ich ilością i pętlą php) pobrać tylko jedną gałąź drzewa czyli podając ID rodzica pobieram rodzica i jego wszystkich potomków i pod-potomków itd. Jak to wykonać i czy w tym układzie to w ogóle możliwe? Pozdrawiam P.S. Jeżeli w nieprawidłowym dziale to przepraszam. Ten post edytował grz16w 10.08.2011, 06:49:57 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Zależy ile masz kategorii w bazie danych. Jeśli nie jest ich kosmicznie dużo to warto rozważyć zastosowanie rozwiązania, które ja stosuję. Pobieram 1 zapytaniem wszystkie rekordy kategorii i w PHP buduję odpowiednią strukturę drzewiastą jako obiekt Tree. Mając taki obiekt załadowany operacje na kategoriach odbywają się bez udziału bazy danych. Wybieranie dzieci danej kategorii (czyli to co chcesz), tworzenie ścieżki kategorii itd. to po prostu zadanie klasy Tree. Dodając do tego mechanizm cache drzewo kategorii zrzucam do pliku i stamtąd pobieram przy kolejnych żądaniach. To rozwiązanie na pewno zużywa więcej pamięci niż każdorazowe odwoływanie się do bazy danych tylko po wycinek danych, ale w przypadku stosunkowo niewielkich drzew kategorii (nie podam Ci konkretnej wartości) sprawdza się wyśmienicie.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 6.10.2025 - 07:54 |