Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Znajdowanie drogi grup forum.
Forum PHP.pl > Forum > PHP
nekomata
Witam , pisze sobie właśnie cms'a i mam taki problemik a mianowicie celem jest nagłowek strony z nazwami grup ( tak jak tutaj jest w nagłówku forum Forum PHP.pl > Forum > PHP ) napisałem skrypt który działa bezproblemowo .. ale zastanawiam się czy nie da się tego uprościć ponieważ za każdym odświeżeniem strony dochodziłaby liczba zapytań... opiszę teraz działanie skryptu :
tabela z grupami wygląda mniej więcej tak (wywalilem z tabeli wszystkie zbędne kolumny które nie mają związku z tematem..):
Kod

id |   name   | under_group
---+-----------+-------------------
1 |  Rules    | 0
---+-----------+-------------------
2 | Rules 2  | 1
---+-----------+-------------------
3 | Rules 3   | 2

a kod php wygląda tak :
  1. function find_path_upwards($id,$dbc,$base){
  2. $clear = array();
  3. $finder = $dbc->prepare('SELECT name,under_group FROM forum_groups WHERE id = ?');
  4. $finder-> execute(array($id));
  5. $finderx = $finder->fetch(PDO::FETCH_ASSOC);
  6. $clear[] = $finderx['name'];
  7. if($finderx['under_group']!==0){
  8. $under = $finderx['under_group'];
  9. $flag = false;
  10. while(!$flag){
  11. $finder -> execute(array($under));
  12. $finderz = $finder->fetch(PDO::FETCH_ASSOC);
  13. $clear[] = $finderz['name'];
  14. $under = $finderz['under_group'];
  15. if($finderz['under_group']==0){
  16. $flag = true;
  17. }
  18. }
  19. }
  20. $clear = array_reverse($clear);
  21. foreach($clear as $link){
  22. echo ' > <a href="'.$base.'forum/'.$link.'/">'.$link.'</a>';
  23. }
  24. return ob_get_clean();
  25. }
$dbc to jest link do klasy PDO jak można się domyśleć ... cały skrypt działa bezproblemowo niema błędów itd .. tylko zastanawiam się czy nie można uprościć całego działania.. jakieś pomysły?Z góry dzięki.
Bags_Bunny
Może to Cię zainteresuje: http://forum.php.pl/index.php?showtopic=17...=0&p=852732
nekomata
Teraz mnie głowa boli od tego logicznego myślenia... całe te drzewa itd...chciałem uprościć a mam utrudnienie... nie da się prościej biggrin.gif?
Bags_Bunny
Możesz trzymać pełną ścieżkę dla każdego elementu, ale optymalnością to nie grzeszy. Tak, siak, czy owak, przy obecnym układzie musisz trzymać coś ekstra, jeśli chcesz wykonać to jednym zapytaniem bez pobierania całej tabeli.
nekomata
No też doszedłem do podobnego wniosku.... i teraz zastanawiam się co wybrać : te moją smieszną funkcje która działa za pomocą liczb.. czy trzymanie pełnego adresu.. chyba jednak wartość liczbowa mniej obciąży bazę nawet przy kilku zapytaniach niż pobierać całą ścieżkę
Bags_Bunny
Jaka przewidujesz ilość kategorii? Bo jeśli to jest coś w stylu 50, to możesz pobierać całość i tyle. Zresztą przy takiej ilości, kilka zapytań nie zrobiłoby na bazie żadnego wrażenia.
Nie mówię, że to ma sens, ale bazy nie zaboli wink.gif.

Inna sprawa, że nested set to fajna sprawa i warto się tego nauczyć, na pewno przyda się w innych sytuacjach. Ma też inne zalety. Zauważ, że ma "wbudowane" sortowanie, dzięki czemu nie musisz już nic dodatkowego implementować.
nekomata
Ja myślę raczej o ilości pod kategorii < 3 może maxymalnie 5 nie więcej , ten nested sam w sobie naprawdę fajnie wygląda ale wolę nie wyciągać machiny wojennej na psa.. albo inne małe zwierzątko biggrin.gif.
Bags_Bunny
Miałem na myśli ilość wszystkich kategorii w bazie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.