ďťż
 
Nested Set ďťż
 
Nested Set
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

Nested Set



Jerzy Skalski - 15-03-2007 00:04
Nested Set
  Witam,

od kilku godzin zmagam się z zadaniem, który nie ptrafię rozwiązać.
Problem:
zaimplementować drzewo kategorii za pomocą "nested set". Chcę aby
kategorie można było wyświetlić w postaci eleganckiego drzewka HTML.
W tym celu z tabeli MySQL muszę wyciągnąć następujące dane:
name, children, level, next_brother gdzie
name - nazwa węzła
children - liczba węzłów potomnych
level - poziom zagnieżdzenia
next_brother - czy dany wezeł ma jeszcze brata po swojej prawej stronie

Tabela ma następującą postać:

CREATE TABLE categories (
id int not null primary key,
name varchar(100),
l int,
r int
);

Tabela jest oczywiście wypełniona danymi. Query, które wyciągnie mi
interesujące dane ma następującą postać:

SELECT s.name, round((s.r -s.l - 1)/2, 0) AS children, count(*) AS level
FROM categories v, categories s
WHERE s.l BETWEEN v.l AND v.r
GROUP BY s.l;

Do kompletu potrzebuję jeszcze informacji o tym, czy dany węzęł ma
następnika(?) na tym samym poziomie - next_brother. Informacji może być
w postaci 1 (tak ma następne rodzeństwo) lub 0 (nie ma następnego
brata). Powyższe zapytanie muszę tak uzupełnić aby w next_brother
pojawiła się taka informacja (1 lub 0).

Pozdrowienia
Jerzy Skalski





Jerzy Skalski - 16-03-2007 00:02

  Jerzy Skalski wrote:
> Witam,
>
> od kilku godzin zmagam się z zadaniem, który nie ptrafię rozwiązać.
> Problem:
> zaimplementować drzewo kategorii za pomocą "nested set". Chcę aby
> kategorie można było wyświetlić w postaci eleganckiego drzewka HTML.
> W tym celu z tabeli MySQL muszę wyciągnąć następujące dane:
> name, children, level, next_brother gdzie
> name - nazwa węzła
> children - liczba węzłów potomnych
> level - poziom zagnieżdzenia
> next_brother - czy dany wezeł ma jeszcze brata po swojej prawej stronie
>
> Tabela ma następującą postać:
>
> CREATE TABLE categories (
> id int not null primary key,
> name varchar(100),
> l int,
> r int
> );
>
> Tabela jest oczywiście wypełniona danymi. Query, które wyciągnie mi
> interesujące dane ma następującą postać:
>
> SELECT s.name, round((s.r -s.l - 1)/2, 0) AS children, count(*) AS level
> FROM categories v, categories s
> WHERE s.l BETWEEN v.l AND v.r
> GROUP BY s.l;
>
> Do kompletu potrzebuję jeszcze informacji o tym, czy dany węzęł ma
> następnika(?) na tym samym poziomie - next_brother. Informacji może być
> w postaci 1 (tak ma następne rodzeństwo) lub 0 (nie ma następnego
> brata). Powyższe zapytanie muszę tak uzupełnić aby w next_brother
> pojawiła się taka informacja (1 lub 0).
>
Witam,

dzisiaj znalazłem rozwiązanie tego problemu, które opiera się na
spostrzeżeniu, że w węzłach, nie posiadających następnego brata, r ma
zawsze wartość mniejszą o 1 od wartości r ich rodzica. Co prawda ta
część zapytania, która generuje mi info o następnym bracie, jest toporna
ale najważniejsze, że to działa:

SELECT s.name, COUNT(*) AS level, ROUND((s.r-s.l-1)/2, 0) AS children,
NOT SUM((v.r-s.l=1)+(s.l=1)) AS brother
FROM cat v, cat s
WHERE s.l BETWEEN v.l AND v.r
GROUP BY s.l;

Pozdrowienia
Jerzy Skalski
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [MS SQL] "set names" (mySQL) w MS SQL db2 alter table alter column set default [DB2/Websphere]: JDBC - result set closed MySQL czy da sie zmienic CHARACTER SET bazy danych? UPDATE tabname SET * = ? - Oracle vs Informix (mysql) zmian character_set_system set timing on, autotrace przez jdbc Mysql 4.0.24 a CHARACTER SET [ORACLE] zmiana character set [mysql] uzyskanie listy z set
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • ponland.htw.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com