Autor | Zpráva | ||
---|---|---|---|
Havlliczech Profil * |
#1 · Zasláno: 2. 12. 2013, 20:39:20 · Upravil/a: Havlliczech
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. { $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 |
#2 · Zasláno: 2. 12. 2013, 20:46:46
Ta funkce iteruje $level, ale nemá žádný return. Jak ji používáte?
|
||
juriad Profil |
#3 · Zasláno: 2. 12. 2013, 20:47:33
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 * |
#4 · Zasláno: 2. 12. 2013, 20:57:30 · Upravil/a: Havlliczech
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 |
#5 · Zasláno: 2. 12. 2013, 21:21:44
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.
|
||
Časová prodleva: 10 let
|
0