Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: drzewko sumowanie wartości dzieci
Forum PHP.pl > Forum > PHP
misiek172
Mam głupi logiczny problem, męczę się juz 4 godzine i nic, juz prawie mam i znowu do pkt wyjścia...

chodzi o to, że np mam drzewko:

but1
.|- but2
.|.....|-but5
.|-but3
.|.....|-but6
.|.....|-but7
.|-but4
.......|-but8
.......|-but9
.............|-but10

teoretycznie powinno to wygladac tak:
but1 = but5 + but6+ but7 + but8 + but10
but2 = but5
but3 = but6 + but7
but4 = but9
but8 = but9

czyli zawsze najniższego dziecka wartość ma być zsumowana.
czyli sprawdza czy dane dziecko, ma jeszcze dziecko, jeśli nie to dodaje jego sumę, jeśli ma to sumę dzieci (jesli nie maja tez dzieci), no i to jest bardzo poplątane i nie mogę sobie poradzić za holere.

Porszę o pomoc, i z góry dziękuje, Łukasz.

albo nie... ja dosłownie BŁAGAM o pomoc, juz mam depresje jak patrzę na to...
Cienki1980
Że tak się zapytam o dwie rzeczy :

but4=but8+but10 << nie powino być tak questionmark.gif
but9=but10 << nie powinno być tak questionmark.gif

I w jakiej postaci masz te dane questionmark.gif W jakiejs wielowymiarowej tablicy czy jakoś inaczej. Kiedyś pisałem podobną funkcję szukająca po wielowymiarowej tablicy i wykonujące działania na danych z poszczególnych poziomach.
misiek172
masz racje jeśli chodzi o but 4i but9, pomiło mi się ;P

a dane mam w bazie MySQL, jest to drzewko folderów oparte na klasie NoSpora.

Wygląda tak: ID, ID_PARENT, NAZWA, MAG

i ID_PARENT określa id rodzica, nazwa to nazwa ;P a właśnie MAG ma sumować
Cienki1980
Na szybko przerabiane z mojej funkcji. Przy moich kilku testach wyszło chyba poprawnie.
  1. <?php
  2. function getIDS($main_id,$text)
  3. {
  4.  $pyt1=mysql_query("select * from test where id_parent='".$main_id."'");
  5.  $ile1=mysql_num_rows($pyt1);
  6.  if($ile1>0)
  7.  {
  8. for($f=0;$f<$ile1;$f++)
  9. {
  10.  $tmp_w=mysql_fetch_array($pyt1);
  11.  $text=getIDS($tmp_w['id'],$text);
  12. }
  13.  }
  14.  else
  15.  {
  16. $pyt2=mysql_query("select * from test where id='".$main_id."'");
  17. $wiersz2=mysql_fetch_array($pyt2);
  18. $text+=$wiersz2['sum'];
  19.  }
  20.  return $text;
  21. }
  22.  
  23. $sum=0;
  24.  
  25. $first_id=4;//pierwsze id od ktorego chcesz zaczac zliczanie.
  26. echo getIDS($first_id,$sum);
  27. ?>


Sprawdź czy zadziała.
misiek172
próbuję go przerobić pod mój skrypt ale nie zlicza.. i coś mi tu nie gra, mianowicie to w tym ELSE. Dlatego, iż według tego jeśli znajdzie wiersz to daje jego sume i koniec dalszych nie szuka... jeśli dobrze zrozumiałęm.

luzik chodzi, udało mi się to optymalizować do mojego skryptu smile.gif

Dziękuje, i jeszcze THX normalnie mam u Ciebie dług wdzięczności.
nospor
Cytat
luzik chodzi, udało mi się to optymalizować ale długo się wczytują wartości
skeszuj sobie i bedzie git. Przeciez nie musisz za kazdym razem ich wyliczac na nowo.
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.