Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Klonowanie gałęzi w drzewku - rekurencja?
miedzna
post
Post #1





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


Witajcie, jest problem, mam drzewko w klasycznym układzie, czyli ID|Name|Parent które mi generuje takie coś:

Książki
|- Kryminał
|-- Kryminał_1
|--- Kryminał_2

i zaszła potrzeba klonowania całych gałęzi, czyli stworzenie drzewka w stylu:

Książki
|- Kryminał
|-- Kryminał_1
|--- Kryminał_2
|
|- Kryminał_klon
|-- Kryminał_1_klon
|--- Kryminał_2_klon

Napisałem funkcję, która mi przelatuje po całej gałęzi i wyciąga wszystkie dzieci dla danego rodzica:

  1. <?php
  2. function Test($id){
  3.  
  4.    $dane = mysql_query("SELECT * FROM tabela WHERE parent = " . $id . " ORDER BY name ASC");
  5.  
  6.    while ($row = mysql_fetch_array($dane)) {
  7.  
  8.        if(isset($row["id"])){
  9.            
  10.            Test($row["id"]);
  11.        }
  12.  
  13.    }
  14.  
  15. }
  16.  
  17. print Test('24');
  18. ?>


i teraz myślę i nie wiem, jak dodać do bazy pobraną gałąź? Myślałem, że można to robić po kolei, czyli dodaję rodzica, za pomocą mysql_insert_id pobieram jego ID i do tego ID dopisuję dziecko, tylko problem polega na tym, że skąd mam wiedzieć (już po pobraniu gałęzi) które dziecko ma być dodawane do którego rodzica, bo zauważcie, że w tabeli wyników trzymam parent dla starej gałęzi, a w przypadku tworzenia nowej, zmienna parent się zmienia.

Ktoś może mnie pokierować na właściwy tor myślenia, bo stanąłem w tym miejscu i nic dalej...

Ten post edytował miedzna 15.02.2009, 00:04:19
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
miedzna
post
Post #2





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


Udało mi się poprawnie klonować ale tylko 1 poziom, czyli wszystkie dzieci pod danym rodzicem, ale nie wiem z jakimi parametrami mam wywołać funkcję klonowania ponownie, żeby przeleciała po wszystkich poziomach zagłębienia. Siedzę nad tym już od kilku dni i nie bardzo mi wychodzi, poniżej kod, ponowne wywołanie funkcji zakomentowałem, bo tu właśnie jest chyba problem.

  1. <?php
  2. function Klonowanie($ParentId, $ParentName = null, $InsertId = null){
  3.  
  4.    // pobieram dane klonowanego rodzica
  5.    $DaneRodzica = mysql_fetch_array(mysql_query("SELECT * FROM tabela WHERE id = " . $ParentId));
  6.  
  7.  
  8.    // dodaje do bazy sklonowanego rodzica
  9.    $KlonRodzica = mysql_query("INSERT INTO tabela VALUES (NULL, '".$DaneRodzica[1]."', ".$DaneRodzica[2].", '".$DaneRodzica[3]."', '".$DaneRodzica[4]."')");
  10.    $IdNowegoRodzica = mysql_insert_id();
  11.  
  12.  
  13.    // pobieram z bazy dzieci klonowanego rodzica
  14.    $DzieciRodzica = mysql_query("SELECT * FROM tabela WHERE parent = " . $ParentId . " ORDER BY name ASC");
  15.  
  16.  
  17.    if(mysql_num_rows($DzieciRodzica) > 0){
  18.  
  19.  
  20.        while ($row = mysql_fetch_array($DzieciRodzica)) {
  21.  
  22.  
  23.            $klonDzieci = mysql_query("INSERT INTO tabela VALUES (NULL, '".$row["name"]."', ".$IdNowegoRodzica.", '".$row["start"]."', '".$row["stop"]."')");
  24.  
  25.  
  26.            //Klonowanie($row["id"]); <-- NIE WIEM CO DALEJ :(
  27.  
  28.        }
  29.    }
  30. }
  31.  
  32. print Klonowanie($_GET["id"]);
  33. ?>


Pomoże ktoś? Nospor, Ty zawsze pomagasz (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował miedzna 14.02.2009, 23:59:58
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: 7.10.2025 - 17:21