Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Drzewka w PHP [rzseattle]
scanner
post
Post #1





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Dyskusje na temat artykułu "Drzewka w php"

Ten post edytował nospor 14.12.2005, 20:12:38
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
rzseattle
post
Post #2





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

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


Niestety nie mam czasu narazie aby dostawic druga czesc arta bo goni mnie wszystko opocz biegunki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Ale widze ze komus moze sie to przydac (i wszyscy wieszaja psy na klasie do rozwiniecia) wiec umieszczam wersje obslugujaca 99 cioro dzieci , a jesli ktos zechce to w piec minut przerobi ja na wersje z mozliwoscia dopisania 999 cioro dzieci do rodzica. Klasa nie wyglada jeszcze tak jakbym chcial ale mysle ze wybaczycie mi drobne niedociagniecia (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) . Jak tylko na uczelni zostawia mnie w spokoju to opisze klase , sprawie by jakos wygladala i dodam pare przydatnych metod.
  1. <?php
  2. class trees{
  3.  
  4. var $maxNest = 5; //liczone od zera()
  5. var $table = &#092;"groups\";
  6. var $digitsPerSub = 2;
  7.  
  8. function trees(){
  9.  
  10. $this->db =& new db;
  11.  
  12. $this->levelNum = $this->maxNest*$this->digitsPerSub;
  13.  
  14. return true;
  15. }
  16.  
  17. function newGroup( $name ){
  18.  
  19. return $this->db->execute(&#092;"INSERT INTO \".$this->table.\" ( cluster, name, level, depth ) SELECT MAX(cluster)+1,'\".$name.\"', RPAD('0',\".$this->levelNum.\",'0'), 0 FROM \".$this->table.\" \");
  20.  
  21. }
  22.  
  23. function newChild( $name, $parentId ){
  24.  
  25. $parent = $this->db->getRow(&#092;"select cluster, LEFT(level, depth*2) as cutLevel, depth FROM \".$this->table.\"
  26. WHERE RIGHT(level,2) != '99' AND
  27. id=&#092;".$parentId);
  28.  
  29. if(!$parent){return false;}
  30.  
  31. return $this->db->execute(&#092;" insert into \".$this->table.\" (cluster, name, level, depth ) select \".$parent['cluster'].\", '\".$name.\"', RPAD( CONCAT( '\".$parent['cutLevel'].\"' ,LPAD( SUBSTRING(g.level, (\".$parent['depth'].\"*2)+1, 2 ) + 1, 2, '0')), \". $this->levelNum .\", '0'),\".$parent['depth'].\"+1
  32. FROM &#092;".$this->table.\" AS g
  33. LEFT JOIN &#092;".$this->table.\" AS p ON CONCAT(g.cluster,'|',RPAD( CONCAT( '\".$parent['cutLevel'].\"' ,LPAD( SUBSTRING(g.level, (\".$parent['depth'].\"*2)+1, 2 ) + 1, 2, '0')), \". $this->levelNum .\", '0')) = CONCAT(p.cluster,'|',p.level)
  34. where g.cluster = &#092;".$parent['cluster'].\" and
  35. g.level like CONCAT( '\".$parent['cutLevel'].\"','%') and
  36. (&#092;".$parent['depth'].\"*2) + 2 <= \".$this->levelNum.\" and
  37. p.level is null
  38. LIMIT 1&#092;");
  39. }
  40.  
  41. function delete( $id ){
  42.  
  43. $r = $this->db->getRow(&#092;"SELECT cluster, LEFT(level, depth*2) as cutLevel,depth
  44. FROM &#092;".$this->table.\"
  45. WHERE id=&#092;".$id);
  46. if(!$r){return false;}
  47.  
  48. return $this->db->execute(&#092;"DELETE
  49.  FROM &#092;".$this->table.\"
  50.  WHERE LEFT( level, &#092;".$r['depth'].\"*2)='\".$r['cutLevel'].\"' AND
  51.  cluster =&#092;".$r['cluster']);
  52.  
  53. }
  54. function getAll( $cluster , $depth = null ){
  55.  
  56. $depth = (is_null($depth))?$this->maxNest:$depth;
  57.  
  58. return $this->db->getArray(&#092;"SELECT *, depth
  59. FROM &#092;".$this->table.\"
  60. WHERE cluster = &#092;".$cluster.\" AND
  61. depth <= &#092;".$depth.\"
  62. ORDER BY level&#092;");
  63. }
  64.  
  65.  
  66. function getPart( $parent_id, $depth = null ){
  67.  
  68. $depth = (is_null($depth))?$this->maxNest:$depth;
  69.  
  70. $r = $this->db->getRow(&#092;"SELECT cluster, LEFT(level, depth*2 ) as cutLevel, depth
  71. FROM &#092;".$this->table.\"
  72. WHERE id=&#092;".$parent_id
  73. );
  74.  
  75. if(!$r){return false;}
  76.  
  77. return $this->db->getArray(&#092;"
  78. SELECT *, depth, depth - &#092;".$r['depth'].\" as relativeDepth
  79. FROM &#092;".$this->table.\"
  80. WHERE cluster = &#092;".$r['cluster'].\" AND
  81. LEFT (level, &#092;".$r['depth'].\"*2) = '\".$r['cutLevel'].\"' AND
  82. depth <= (&#092;".$depth.\"+\".$r['depth'].\")
  83. ORDER BY level&#092;");
  84.  
  85. }
  86.  
  87. }
  88.  
  89. ?>


i dodajcie kolumne depth (int) do poprzedniej tabeli (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post

Posty w temacie
- scanner   Drzewka w PHP [rzseattle]   14.04.2004, 10:19:48
- - Seth   Trzy dni wczesniej ten art byl by dla mnie zbawien...   14.04.2004, 11:34:49
- - scanner   Trzy dni wcześniej byłem na wyjeżdzie, a art dosta...   14.04.2004, 11:36:42
- - halfik   No a dla mnie byłby zbawienny 2 tygonei temu, gdy ...   14.04.2004, 13:43:55
- - lukaswoj   Bardzo ciekawe podejście. Ja jakiś czas temu jak ...   14.04.2004, 14:28:23
- - kwiateek   Jasno, zwięźle i konkretnie (-;. Mi także się ten ...   14.04.2004, 16:00:15
- - enceladus   Fajna i prosta implementacja, tylko to ograniczeni...   14.04.2004, 21:10:53
- - rzseattle   Ciesze sie ze art bedzie pomocny . Co do samej i...   14.04.2004, 22:22:52
- - halfik   Ale dlaczego chesz ograniczać wielkość drzewa? Czy...   15.04.2004, 07:19:04
- - enceladus   CytatNie chcialem stosowac zaawansowanych i nie pr...   15.04.2004, 10:34:56
- - rzseattle   CytatAle dlaczego chesz ograniczać wielkość drzewa...   15.04.2004, 19:27:27
- - DhuCerbin   troche nieciekawym rozwiazaniem jest korzystanie w...   15.04.2004, 20:37:31
- - Bora   Zastanawiało mnie czy to LIKE jest optymalne i mo...   15.04.2004, 22:39:40
- - rzseattle   Bora podejscie i oznaczenia jak najbardziej sluszn...   15.04.2004, 22:50:37
- - Nalfein][WR   rzseattle - fajna koncepcja, a co do głównego ogra...   17.04.2004, 13:35:17
- - rzseattle   Cytat[WR"]a co do głównego ograniczenia - 9 dzieci...   17.04.2004, 14:42:28
- - Nalfein][WR   Jeśli już masz tak gmatwać to może rozważ użycie n...   18.04.2004, 13:29:00
- - rzseattle   Pisalem ze ta klasa jest kompatybilna z ADODB (lin...   26.04.2004, 21:30:32
- - It's_me   rowniez go widzialem prosze Moderatorów Wortal - R...   27.04.2004, 06:06:44
- - DhuCerbin   rzseattle : jaki masz sposób odczytu wszystkich ro...   27.04.2004, 21:47:10
- - Seth   CZy ktos probowal pobrac sciezke do elementu drzew...   3.05.2004, 16:19:37
- - rzseattle   Nie no az takim wyjadaczem w SQLu nie jestem. Robi...   3.05.2004, 19:37:06
- - Seth   No coz zostaje mi wlasnie takie rozwiazanie. Jak d...   3.05.2004, 19:41:07
- - DhuCerbin   ja najpierw na podstawie numerka generuje numerki ...   3.05.2004, 19:54:29
- - Seth   Zmeczenie robi swoje.. nie zauwazylem tego   3.05.2004, 19:57:24
- - eXtreme   Mógłby ktoś zarzucić kodem jak rozwiązał ta ścieżk...   11.05.2004, 17:51:30
- - DhuCerbin   Majac dane numerek tego jednego, robisz na nim ope...   11.05.2004, 19:34:01
- - invx   i o takie drzewka moge napisac system frum hyba, n...   12.05.2004, 18:25:50
- - scanner   invx: jeszcze jeden taki post i Twoje nabijanie po...   12.05.2004, 19:33:24
- - invx   przeczytalem artykul, i z niego wywnioskowuje, ze ...   12.05.2004, 20:07:04
- - treewood   No moim zdaniem metoda w tym artykule jest troche ...   15.05.2004, 10:41:39
- - eXtreme   Ale trzeba mieć Postgresa a nie każdy go ma.   16.05.2004, 16:13:25
- - slaw:)   Zgadza sie, zeby metoda depesza dzialala pgsql mus...   27.05.2004, 20:32:39
- - rzseattle   Niestety nie mam czasu narazie aby dostawic druga ...   27.05.2004, 21:03:56
- - treewood   jakiego znow postrgresa? ja ta metode uzylem w MyS...   28.05.2004, 10:06:58
- - 123tomek   Moze mi ktos podpowiedziec jak zmodyfikowac ten pr...   16.11.2004, 14:39:37
- - Vengeance   http://www.forum.kasart98.com/viewtopic.php?t=9414   16.11.2004, 15:00:16
- - aszlej   Witam! Od wczoraj nad tym siedze, ale za nic ...   17.01.2005, 21:26:34
- - rzseattle   sugestia nr 1 Zmien metode newCHild na [PHP] ...   22.01.2005, 14:33:06
- - aszlej   Tak jak mowie probówałem już dawać zapytanie na ek...   22.01.2005, 15:19:07
- - rzseattle   Wyglada na to ze to ja sie walnalem kopiujac nowsz...   22.01.2005, 17:14:15
- - aszlej   Cytat(rzseattle @ 2005-01-22 16:14:15)Wyglada...   22.01.2005, 22:00:40
- - hawk   Polecam artykuł http://arxiv.org/html/cs.DB/040101...   2.02.2005, 14:55:27
- - AcidBurnt   nie dziala mi stronka depesza, ma moze ktos te art...   1.03.2005, 16:04:41
- - wallace   Cytat(AcidBurnt @ 2005-03-01 17:04:41)nie dzi...   15.04.2005, 23:49:42
- - amicek   Cytat(AcidBurnt @ 2005-03-01 15:04:41)nie dzi...   27.04.2005, 07:54:56
- - Diwi   Cóż powiem że artykuł jest świetny a ja w chwili c...   23.05.2005, 15:13:48
- - kłulik   Sory, że odświerzam. Jeśli ktoś ma skrypt drzewek ...   26.05.2005, 23:07:18
- - Nickesh   Witam... Ogolnie gratuluje tworcy tego pomyslu z ...   26.11.2005, 15:57:54
- - DeyV   U mnie to zapytanie wygląda mniej więcej tak: [S...   27.11.2005, 20:47:29
- - AxZx   bedzie ta klasa ulepszona jeszcze? bo troche chyb...   23.01.2006, 15:58:07


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

 



RSS Aktualny czas: 4.10.2025 - 07:29