Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Drzewko z bazy, jak pobrać wszystkie poziomy zaglębienia?
miedzna
post
Post #1





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Witajcie, mam drzewko w bazie o strukturze:

ID | Name | Parent

kopiując jakoś gałąź kopiuję ją wraz z podzakładkami i wykonuję zapytanie w stylu

SELECT * FROM tabela WHERE Parent = 1

i w ten sposób pobieram wszystkie dzieci zakładki o ID 1, a jak wykonać zapytanie, żeby pobrać wszystkie dzieci dzieci, czyli wnuki zakładki o ID 1, jakaś funkcja rekurencyjny, ale jak ją zbudować, macie jakieś pomysły?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
Shili
post
Post #2





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

Ostrzeżenie: (0%)
-----


Zrób sobie funkcję powiedzmy pobierz(id)
z zawartością
Kod
SELECT * FROM tabela WHERE Parent = id
while(są wyniki) {
    zmienna = pobierz id z kolejnego wyniku
    wywolaj pobierz(zmienna)
}
Go to the top of the page
+Quote Post
osiris
post
Post #3





Grupa: Zarejestrowani
Postów: 121
Pomógł: 15
Dołączył: 19.07.2007

Ostrzeżenie: (0%)
-----


jesli Twoj silnik bazodanowy obsługuje CTE (Common Table Expressions) to najlepiej tego uzyc. przyklad:
  1. CREATE TABLE MenuPositions(
  2. PosId INT PRIMARY KEY,
  3. Nazwa VARCHAR(30) NOT NULL,
  4. Url VARCHAR(50) NOT NULL,
  5. ParentId INT NULL REFERENCES MenuPositions(PosId)
  6. );
  7.  
  8. WITH MenuTree(Id, Nazwa, Url, Poziom)
  9. AS (
  10. SELECT m.PosId, m.Nazwa, m.Url, 1 AS Poziom
  11. FROM MenuPositions AS m
  12. WHERE m.ParentId IS NULL
  13. UNION ALL
  14. SELECT m.PosId, CONVERT(VARCHAR, REPLICATE(' ', Poziom) + m.Nazwa), m.Url, Poziom + 1
  15. FROM MenuPositions AS m
  16. INNER JOIN MenuTree AS t ON m.ParentID = t.Id
  17. )
  18. SELECT Id, Nazwa, Url, Poziom
  19. FROM MenuTree

MS SQL to obsluguje, MySQL niestety nie. W Oracle'u jesli dobrze pamietam mozna osiagnac to samo z uzyciem klauzuli CONNECT BY

Pozdrawiam
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 20:15