Dziękuję za odpowiedź.
W bazie danych każdy użytkownik ma oczywiście unikalne pole `id`, pole `powiazani` - w którym przechowuję dane w formie:
5,8,12,45,90 (tak, wiem, że to można optymalniej zrobić na oddzielnej tabeli ale nie w tym teraz sęk), pole `liczbaPow` - jest to liczba numerów id w polu `powiazani` (każdy użytkownik może mieć max. 5 id powiązanych ze swoim kontem). Jeżeli `liczbaPow` == 5 to algorytm szuka, wśród już powiązanych, id do którego może wykonać powiązanie (użytkownika z już powiązanych, którego pole `liczbaPow` < 5).
Przy rejestracji nowego użytkownika, podawany jest id użytkownika już istniejącego w systemie (klient polecający).
Fragment kodu rejestracji:
$r = mysql_query("SHOW TABLE STATUS LIKE 'uzytkownicy'"); $ai = $row['Auto_increment'];
$idRefs = ustawPowiazanie($ai,$idRef);//$idRef to id klienta polecającego, $idRefs jest zapisywane w polu `idRef` nowego użytkownika
Funkcja odpowiedzialna za wyliczenie "wolnego" (`liczbaPow` < 5) klienta polecającego:
function ustawPowiazanie($idNowego,$idPolecajacego)
{
$zapytanie = "SELECT powiazani, liczbaPow FROM `uzytkownicy` WHERE `id` = '$idPolecajacego'";
$ls = explode(",",$w['powiazani']);
$lpow = $w['liczbaPow'];
if($lpow == 5)
for($i = 0; $i < 5; $i++)
{
$zapytanie = "SELECT powiazani, liczbaPow FROM `uzytkownicy` WHERE `id` = '".$ls[$i]."'";
if($ws["liczbaPow"] < 5)
return ustawPowiazanie($idNowego,$ls[$i]);
}
else
{
$lpow++;
$zapytanie = "UPDATE `uzytkownicy` SET `powiazani` = '$im', `liczbaPow` = '$lpow' WHERE `id` = '$idPolecajacego'";
return $idPolecajacego;
}
return false;
}
I teraz najważniejsza sprawa, bo powyższe działa dobrze, potrzebuję wyświetlić dane w formie tabeli, czy też drzewa - potrzebna mi do tego tablica wielowymiarowa, tworzona po podaniu numeru id klienta/użytkownika, zawierająca id wszystkich powiązanych klientów, powiązanych powiązanych, powiązanych powiązanych powiązanych itd. - 10 poziomów w głąb. Chodzi o drabinkę systemu MLM.
Jej format powinien być następujący:
idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/) ),
idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/) ),
idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/) ),
idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/) ),
idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/) )
),
idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/) ),
idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/) ),
idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/) ),
idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/) ),
idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/) )
),
idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/) ),
idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/) ),
idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/) ),
idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/) ),
idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/) )
),
idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/) ),
idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/) ),
idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/) ),
idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/) ),
idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/) )
),
idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/) ),
idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/) ),
idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/) ),
idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/) ),
idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/), idPowiazanego
=> array(/*itd*/) )
)
);
Z obliczeń wynika, że przy takim zagłębieniu i maksymalnym zapełnieniu tablicy, liczba jej elementów wyniesie

, ale przy zagłębieniu 7 liczba elementów to

Z reguły w takich aplikacjach przyjmuje się, że liczba osób podpiętych pod każdego klienta jest nie większa od 3 - ja mam w specyfikacji, że ma być nie większa od 5, co drastycznie zwiększa ilość danych przy 10. stopniach zagłębienia.
Jak teraz wykonać metodę, która będzie w stanie utworzyć tak dużą tablicę wielokrotnie zagnieżdżonych tablic?