Autor Zpráva
Havlliczech
Profil *

Zdravím, potřeboval bych radu, našel jsem rekurzivní funkci pro výpočet celkového počtu pod vybraným rodičem(záznam z které jdou další záznamy)  záznamů, problém je v tom že z této funkce dostanu pouze počet následných levelů (urovní chceteli), ale v případě že jeden level obsahuje daší záznamy nevím jak přimět funkci a aby je vypsala.

Příklad tabulky. levý atribut - ID_A , pravý atribut - ID_U
ID_A - id nově registrovaného uživatele | ID_U - id uživatele který přivedl nové uživatele
řádek #1 | 10  |  | 9 |
řádek #2 | 11  |  | 9 |
řádek #3 | 12  |  | 11 |
řádek #4 | 13  |  | 11 |
řádek #5 | 14  |  | 12 |

V případě že se díky uživately s ID 9 někdo registruje přičítá se to k jeho indexu, v případě že se někdo registruje pod uživatelem 11 kterého pozval uživatel 9, uživatel 9 taktéž se přičte k jeho indexu. Vzhledem k tabulce by měl vyjít celkový součet řádků tzv.index = 5 protože uživatel s ID 9 pozval uživatele s ID 10 a 11 ty dále pozvali uživatele s ID 12,13 a 14.
function getTree($rodic, $level)
{
$result = mysql_query('SELECT * FROM tblaffil WHERE ID_U='.$rodic);
while ($row = mysql_fetch_assoc($result)) {
getTree($row['ID_A'], $level++);
}
}
Dokáže někdo obohatit tuhle konstrukci tak, aby vracela celkový počet záznamů?



Omlouvám se za to formátování.


omloouvám se za to formátování
Alphard
Profil
Ta funkce iteruje $level, ale nemá žádný return. Jak ji používáte?
juriad
Profil
Havlliczech:
Než začneš vytvářet rekurzivní funkce pracující s databází, tak si rozmysli, kolik těch uživatelů bude; pokud jich je řádově méně než tisíce, tak si můžeš dovolit vytáhnout všechny z databáze najednou (SELECT * FROM tblaffil) a v PHP si je uložit do pole; následně to pole prochazet a informaci o úrovni a počtu potomků si dopočítat „ručně“.
Havlliczech
Profil *
No to je právě to, že se očekává že těch uživatelů bude více jak 10000.


Alphard:
return tam chybí z toho důvodu že já nepotřebuju return levelů ale celkového součtu jednotlivých polí.


Napadlo mě možné řešení. U uživatele, známe koho pozval (a kdo se tím pádem registroval na jeho popud) - podle afill čísla
- takže dejme před sčítání směrem pod sebe podmínku - spočítej všechny co mají jako rodiče můje affil číslo.

Teď ještě vymyslet jak to správně implementovat do té funkce. Nějaké návrhy?
Alphard
Profil
Na tohle existují lepší struktury, třeba traverzování kolem stromu. Hůř se to spravuje, ale počet položek podstromu z toho dostanete jedním dotazem.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: