Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP/MYSQL] Struktura drzewa - wielokrotne zagniezdzenie
xajart
post
Post #1





Grupa: Zarejestrowani
Postów: 141
Pomógł: 1
Dołączył: 2.12.2008

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


Witam. 


Opracować musze drzewo o wielokrotnym zagniezdzeniu, jednak mi to nie wychodzi - pewnie z braku wiedzy w dziedzinie php. 

Mam tabele w takiej formie 

Id | sub | poziom | pozycja | name
3. | 0 | 0 | 1   | A 
2. | 1 | 1 |  1  | B
1. | 2 | 2 |   2 | C
4. | 2 | 2 |   1 | D
5. | 1 | 1 |  1  | E
6. | 0 | 0 | 0   | F


Struktura powinna wobec tego wyglądać tak:
A.
- B
-- D
-- C
- E
FRozpisałem sobie taki algorytm

Kod
for ($i=1; $i<=$rows; $i++){
  echo $id[$i];
 $t[] = NULL; 
 for ($j=1; $j<=rows; $j++){
  if ($sub[$j] == $id[$i] AND $sub[$j] != t[$j]){
   for ($k=0; $k<=count($t);$k++){
    echo $id[$j];
    $t[$j] == $id[$j]
   }
  }
 }
}


Niestety kod nie działa tak jak zamierzałem, z racji że nie wiem jak zdefiniować te tabele, bo mają pełnić one role taką że jeżeli znajdzie element w pętli J i wyświetli dany element, to ID tego elementu powinno zostać zapisane w BD, by algorytm mógł je pominąc przy kolejnym sprawdzaniu sprawdzaniu. Tylko. Zaś jak przejdzie do inkrementacji I to tabela powinna zostać wyczyszczona.



Nie wiem czy dobrze rozumuje, prosiłbym was o pomoc z rozwiązaniem tego, bo sobie nie potrafie z tym dać rady, co do powyższych tabel, to opcjonalnie powinno wystarczyć id i sub alternatywnie poziom określa poziom zagłębienia 0 - główne, 1 -pz pierwszy, 2 - pz drugi itd.

W sumie to zależy mi do zagłębienia do poziomu 3, ale jeżeli by realizowało to więcej zagłębień było by bardziej przyszłościowe, bym za pare miesięcy nie musiał się zastanawiać jak 4 poziom czy 5 zrealizować.

Ten post edytował xajart 23.01.2009, 11:21:04
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
EarthCitizen
post
Post #2





Grupa: Zarejestrowani
Postów: 286
Pomógł: 70
Dołączył: 13.01.2009

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


A ile masz tych rekordów? W Twoim przypadku musisz sobie napisać np funkcję:
  1. <?php
  2. function drzewo($id = 0) {
  3.    if ($id == 0) {
  4.        $sql = 'SELECT * FROM tabela WHERE sub = 0';
  5.    } else {
  6.        $sql = 'SELECT * FROM tabela WHERE sub = ' . (int)$id;
  7.    }
  8.  
  9.    $result = mysql_query($sql);
  10.  
  11.    if (mysql_num_rows($result)) {
  12.        while ($row = mysql_fetch_array($result)) {
  13.  
  14.            echo str_repeat('---', $row['pozycja']) . $row['name'] . '<br />';
  15.            drzewo($row['id']);
  16.  
  17.        }
  18.    }
  19. }
  20. ?>


Lecz już przy kilkuset rekordach będzie to mało wydajne...

Jeżeli potrzebujesz rozwiązania na kilka tysięcy i więcej i ma to chodzić stabilnie to wróć do artykułu, który przesłał Ci _olo_1984
Go to the top of the page
+Quote Post

Posty w temacie


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: 6.10.2025 - 15:15