Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

3 Stron V  < 1 2 3  
Reply to this topicStart new topic
> Drzewka w PHP [rzseattle]
rzseattle
post 22.01.2005, 17:14:15
Post #41





Grupa: Przyjaciele php.pl
Postów: 554
Pomógł: 0
Dołączył: 4.04.2002
Skąd: Tychy

Ostrzeżenie: (0%)
-----


Wyglada na to ze to ja sie walnalem kopiujac nowsza klase. Zapomialem o wlasnosci klasy $digitsPerSub okreslajaca ilosc cyfer przypadajaca na okresleniepoziomu zagniezdzenia. Ciekawe czemu to wczesniej nie wyszlo . Juz poprawiam zamieszczana wyzej klase.


--------------------
"Real children don't go hoppity-skip unless they are on drugs."
Go to the top of the page
+Quote Post
aszlej
post 22.01.2005, 22:00:40
Post #42





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 17.01.2005

Ostrzeżenie: (0%)
-----


Cytat(rzseattle @ 2005-01-22 16:14:15)
Wyglada na to ze to ja sie walnalem kopiujac nowsza klase. Zapomialem o wlasnosci klasy  $digitsPerSub okreslajaca ilosc cyfer przypadajaca na okresleniepoziomu zagniezdzenia. Ciekawe czemu to wczesniej nie wyszlo . Juz poprawiam zamieszczana wyzej klase.


Ehh dzieki Ci za ta poprawke ;]. Teraz wszystko juz dziala tak jak powinno. Btw wogole dzieki za ta klase - jest jedna z lepszych moim zdaniem :].

Ten post edytował aszlej 22.01.2005, 22:04:15
Go to the top of the page
+Quote Post
hawk
post 2.02.2005, 14:55:27
Post #43





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

Ostrzeżenie: (0%)
-----


Polecam artykuł http://arxiv.org/html/cs.DB/0401014.

Krótkie wprowadzenie: to co opisuje rzseattle to jest sprytnie zoptymalizowana implementacja Materialized Path. Oprócz tego istnieje jeszcze metoda opisywana przez depesza (formalnej nazwy nie znam) i Nested Sets wymyślone przez Joe Celko (to co omawiał tutaj Nalfein). Nested Sets są bardzo szybkie przy odczycie, ale każda zmiany struktury wymaga dodatkowego UPDATE obejmującego średnio połowę węzłów.

Powyższy artykuł został napisany przez gościa, który wymyślił Nested Intervals - technikę podobną do Nested Sets, z tym że left i right są liczbami wymiernymi, a nie całkowitymi, co pozwala na wyeliminowanie niepotrzebnego UPDATE.

A teraz uwaga: artykuł opisuje, w jaki sposób zapisać te dwie potrzebne liczby wymierne za pomocą... jednego integera blink.gif.

Jeżeli ktoś to zrozumie to chylę czoła biggrin.gif.
Go to the top of the page
+Quote Post
AcidBurnt
post 1.03.2005, 16:04:41
Post #44





Grupa: Zarejestrowani
Postów: 215
Pomógł: 1
Dołączył: 13.04.2003
Skąd: z ławki przed blokiem

Ostrzeżenie: (0%)
-----


nie dziala mi stronka depesza, ma moze ktos te arty gdzies zapisane lub jakis mirror?
Go to the top of the page
+Quote Post
wallace
post 15.04.2005, 23:49:42
Post #45





Grupa: Zarejestrowani
Postów: 65
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Kraków / Będzin

Ostrzeżenie: (0%)
-----


Cytat(AcidBurnt @ 2005-03-01 17:04:41)
nie dziala mi stronka depesza, ma moze ktos te arty gdzies zapisane lub jakis mirror?

no ja tez szukalem i to znalazlem:
http://www.dbf.pl/faq/tresc.html?rozdzial=1


--------------------
chaos to tylko inny rodzaj porządku ... bardziej skomplikowany...
Go to the top of the page
+Quote Post
amicek
post 27.04.2005, 07:54:56
Post #46





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 19.04.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Cytat(AcidBurnt @ 2005-03-01 15:04:41)
nie dziala mi stronka depesza, ma moze ktos te arty gdzies zapisane lub jakis mirror?

Archiwum stronki depesza jest dostepna tutaj.


--------------------
Pozdrawiam, amicek

ostatnio wykonane: dodatki do kuchni.
Go to the top of the page
+Quote Post
Diwi
post 23.05.2005, 15:13:48
Post #47





Grupa: Zarejestrowani
Postów: 245
Pomógł: 4
Dołączył: 22.01.2005

Ostrzeżenie: (0%)
-----


Cóż powiem że artykuł jest świetny a ja w chwili czasu dopisałem jeszcze jedną metode:

Często gdy wchodzimy na jakiejś stronie do kategorii możemy na samej górze treści zauważyć:

Download / Skrypty php / CMS-y

Napisałem metode która tworzy coś takiego na podstawie klasy z artykułu:

  1. <?php
  2. function getOther ( $actual_id ) {
  3.  
  4. $r = $this->db->getRow(&#092;"
  5. SELECT * FROM
  6. groups
  7. WHERE id='$actual_id'
  8. &#092;");
  9.  
  10. $oczysc_level_z_zer = str_replace('0', '', $r['level']);
  11.  
  12. $kategorie = substr($oczysc_level_z_zer , 0, -1);
  13.  
  14. $ilosc = strlen($kategorie);
  15.  
  16. for ($i = 1; $i <= $ilosc; $i++) {
  17.  
  18. $zmienna = substr($kategorie , 0, $i);
  19.  
  20. $zmienna = $zmienna.str_repeat('0', 7 - strlen($zmienna));
  21.  
  22. $wykonaj[$i] = $this->db->getRow(&#092;"SELECT * FROM `groups` WHERE LEVEL = \".$zmienna);
  23.  
  24. }
  25.  
  26. foreach ($wykonaj as $costam) {
  27.  
  28. echo $costam['name'].' / ';
  29.  
  30.  }
  31.  
  32. echo $r['name'];
  33.  
  34. }
  35. ?>


U mnie działa więc u was też powinno. Można sobie zmienić sposób wyświetlania i wogóle wszystko winksmiley.jpg.

Przykład zastosowania
  1. <?php
  2. $t = new trees;
  3.  
  4. $t->getOther(57);
  5. ?>


Taki skrypcik (przy rekordach z artykułu zwraca nam coś takiego)

windows / NT / Win 2003

Wadami tego zastosowania jest:

Bardzo duża ilośc wykonywanych zapytań SQL.
Ograniczenie maks. poziomu zagnieżdżenia do 7 leveli. Można to bardzo łatwo zmienić wystarczy zmienić
$zmienna = $zmienna.str_repeat('0', 7 - strlen($zmienna));
na
$zmienna = $zmienna.str_repeat('0', ILOSC_LEVELI - strlen($zmienna));

Pozdrawiam

Ten post edytował Diwi 23.05.2005, 15:30:10
Go to the top of the page
+Quote Post
kłulik
post 26.05.2005, 23:07:18
Post #48





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 27.01.2005
Skąd: Copa Cabana

Ostrzeżenie: (0%)
-----


Sory, że odświerzam.
Jeśli ktoś ma skrypt drzewek zrobiony w oparciu o metodę depesza ale z wykorzystaniem MySQL niech się odezwie na PW. Proszę
Go to the top of the page
+Quote Post
Nickesh
post 26.11.2005, 15:57:54
Post #49





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 3.09.2005

Ostrzeżenie: (0%)
-----


Witam...

Ogolnie gratuluje tworcy tego pomyslu z levelem. Mimo wszelkich uwag, podanych na forum, dla niezbyt obszernych projektow, to idealne, szybkie i proste w implementacji rozwiazanie.

Jesli chodzi o zwiekszenie ilosci dzieci, to mysle, ze sporym uproszczeniem jest dodanie jeszcze jednego zalozenia. Mam na mysli pomysl z uzyciem dwoch cyfr do reprezentacji kazdego poziomu glebokosci w polu level. Przy takim zapisie, nalezaloby zwrocic uwage na poczatkowe zero w level'u, np 010201000...
Przy wszelkich operacjach matematycznych, bedzie ucinane ze sciezki.
Mozna dzialac LPADem w kazdym zapytaniu, ale chyba latwiej jest po prostu ustalic, ze levele zaczynaja sie od 10, a nie od 01. Rezygnacja z tych dziesieciu dzieci przy kazdym rodzicu, nie powinna miec az takiego znaczenia. Zwlaszcza, ze - tak jak pisalem wyzej - taki sposob konstrukcji drzewa bedzie znakomicie nadawal sie do mniejszych struktur, np. drzewiaste menu, gdzie nie bedzie sie przekraczalo tych 90 dzieci, natomiast 10 byloby chyba niewystarczajace. W dodatku ograniczenie to w zasadzie moze dotyczyc tylko pierwszego, najwyzszego poziomu.

Ten sposob uratowal mnie przed dalsza meczarnia, po mnowstwie nieudanych prob z ta najbardziej intuicyjna struktura drzewa (ID i parent_ID w kazdym wierszu), od ktorej podobno kazdy z nas zaczynal ;P

dzieki ;]


Edit:

Probowalem napisac zapytanie, ktore wypisze mi sciezke od korzenia do elementu o podanym ID (np. home>gallery>sport...). Udalo mi sie tylko z obrobka zapytania przez php. Czy ktos probowal dzialac w tym kierunku przy pomocy samego SQLa?

Ten post edytował Nickesh 27.11.2005, 15:05:55


--------------------
warsztat: winXP | apache 1.3.27 | MySQL 4.0.15 | PHP 4.3.3
warsztat 2: Debian | apache 2.0.55 | MySQL 4.1.7 | PHP 5.0.5
Go to the top of the page
+Quote Post
DeyV
post 27.11.2005, 20:47:29
Post #50





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




U mnie to zapytanie wygląda mniej więcej tak:

  1. SELECT
  2. tree_kategorie.id,
  3. tree_kategorie.sname
  4.  
  5. FROM tree_powiazania INNER JOIN tree_kategorie ON ( tree_powiazania.parent_id=public.tree_kategorie.id)
  6. WHERE tree_powiazania.child_id = '$iChildId'
  7. ORDER BY tree_powiazania.depth DESC


Niestety - nie jestem pewien, czy będzie u Ciebie działało poprawnie, ponieważ pracuję na nieco zmodyfikowanej wersji depeszowego drzewka.


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
AxZx
post 23.01.2006, 15:58:07
Post #51





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


bedzie ta klasa ulepszona jeszcze?

bo troche chyba jest wadliwa.


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post

3 Stron V  < 1 2 3
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 11:35