[PHP] Nested sets - jak zbudować drzewo (left, right)?

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
WebCM
Nowy
Nowy
Posty: 31
Rejestracja: sob wrz 10, 2005 6:57 pm

[PHP] Nested sets - jak zbudować drzewo (left, right)?

Post autor: WebCM »

Potrzebuję skryptu, który ustawi automatycznie pola left i right na podstawie:

Kod: Zaznacz cały

ID | ID wyższej kategorii
http://pastebin.4programmers.net/2953 - ta funkcja zajmuje się ponownym zapisem ilości pozycji w kategoriach. Czy dałoby się podpiąć tutaj również uaktualnianie tych pól? Funkcja:
- pobiera wszystkie kategorie z bazy
- liczy zawartość (I FOR)
- iteruje po każdej kategorii (II FOR)
--- wyszukuje "rodziców" i dodaje im swoją liczbę pozycji (WHILE)

Jeśli nie da się podpiąć tego, dobra będzie też osobna funkcja (a może nawet lepiej?). Tylko w jaki sposób napisać odpowiedni algorytm? Najlepiej, by nie wykonywał osobnego zapytania dla każdej kategorii jak w przykładzie na SitePoint. LEFT oznacza też kolejność (zapytanie do wyświetlenia listy kategorii zawiera: ORDER BY left), choć przebudowa ewentualnie może opierać się na tytułach (alfabetycznie).
the_foe
Przelotem
Przelotem
Posty: 295
Rejestracja: pt sty 31, 2003 12:53 pm
Lokalizacja: Wałbrzych
Kontakt:

Re: [PHP] Nested sets - jak zbudować drzewo (left, right)?

Post autor: the_foe »

[php]<?php
$connect = mysql_connect('host', 'user', 'pass');
mysql_select_db('baza', $connect);

function liczby($liczba, $i = 0)
{
$res = mysql_query("SELECT * FROM tabela WHERE motherid = ".$liczba);
while($row = mysql_fetch_assoc($res))
{
echo ($liczba == 0) ? '<b>' : '';

for($a=0; $a<$i; $a++)
{
echo '...';
}
echo $row['title'];
echo ($liczba == 0) ? '</b>' : '';
echo '<br />'."\n";
liczby($row['id'], $i+1);
}
}

liczby(0);
?>[/php]

kod by tiraeth
ODPOWIEDZ