Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Drzewka - 2 problemy (pytania)
Forum PHP.pl > Forum > Bazy danych > MySQL
spenalzo
A więc tak:
doszedłem do wniosku że najlepszą metodą na to (w troche ograniczonej formie) bedzie zastosowaniie prostego drzewka:

[sql:1:ecb7244da1]CREATE TABLE god_connections (
userid int(11) NOT NULL default '0',
parent int(11) default NULL
) TYPE=MyISAM;[/sql:1:ecb7244da1]

do wyciągania wszystkich użytkowników używam takiej funkcji
[php:1:ecb7244da1]<?php
function get_childs($id, $myid)
{
global $us;
static $cnt, $ilosc;
$cnt=!empty($cnt)? $cnt : 0;
$q=mysql_query("SELECT u.id, u.nazwa, c.parent FROM test u, god_connections c WHERE c.parent='".$id."' AND c.userid=u.id ORDER BY u.id ASC") or die(mysql_error());
$il=@mysql_Num_rows($q);
$ilosc+=$il;
if($il>0)
{
while($t=mysql_fetch_array($q))
{
get_childs($t["id"],$myid,0);
$us[$cnt]["n"]=$t["nazwa"];
$us[$cnt]["i"]=$t["id"];
$cnt++;
}
}
}

?>[/php:1:ecb7244da1]

i teraz, żeby wyciagnąć wszystkich użytkowników zwiazanych ze mną używam tego tak:
[php:1:ecb7244da1]<?php
$us=array();
get_childs(5,5);
?>[/php:1:ecb7244da1]
gdzie 5 to moj ID. W wyniku tego otrzymuje tablice z ID i nazwa.

Teraz pytania:

1. jak ograniczyć liczbę "poziomów" na 3 w dół od mojego (czyli tam gdzie userid=moj_id i parent=null) questionmark.gif

2. jak zrobić, żeby otrzymywać jako kolejne pole w tabeli wszystkich rodziców (najlepiej po kolei) danego uzytkownika - czyli jak gdzies dalej mam znajomego Ziutka to widze mniej wiecj tak:
spenalzo <=> Marianna <=> Zdzisław <=> Ziutek

Dziekuję z góry za wskazówki i pomoc.
uboottd
A masz te trzy poziomy zafiksowane na absolutnie stale ?
spenalzo
W sumie tak, ponieważ musi być jakieś ograniczenie głębokości - a przy takim sposobie każdy kolejny poziom rosnie już coraz bardziej, a chodzi o to, żeby to było w miare wydajne - oczywiście może się to zmienić smile.gif ponieważ i tak bedzie cachowanie wyników smile.gif ale nie chce żeby to sie mocno rozrosło...
uboottd
To jak absolutnie trzy to sklej ze se ta tabele dwa razy sama ze soba i pociagnij wyniki hurtem winksmiley.jpg
spenalzo
Grrrr próbowałem wszystkiego i nadal to samo angrysmiley.gif Za każdym razem przy dużej ilości powiązanych rekordów wysypuje sie Apache... Już mam tego dość sad.gif :x :cry:

Hmmm ale w takiej postaci nie bede mógł usunąć danego użytkownika ze swojej listy - bo jest powiązany z innymi. Co za kupa... ](*,)
spenalzo
Dobra, ma ktoś może jakieś pomysły jak to zrobić? Próbowałem zagnieżdzonych selectów (kicha), jakichś połączeń tabel (kicha) i nadal nie wiem nic rolleyes.gif
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.