2010-03-04 21 views
8

Mam tabelę bazy danych, które łączą lokalizacje; lokalizacja może znajdować się w lokalizacji, która może znajdować się w innej lokalizacji.MySQL - Recursing a tree structure

location (<id>, ....) 
location_parent (<location_id>, <parent_id>) 

Oto MySQL/PHP zejść na głębokość jednego:

$sql = "SELECT id FROM se_locations_services WHERE parent_locationid IN 
(SELECT location_id FROM se_locations_parent WHERE parent_id = '$locationid')"; 

Jak to zrobić, biorąc pod uwagę położenie rodzic, dostaje wszystkie swoje lokalizacje potomków, bez względu na to, jak głęboko, tylko przy użyciu MySQL?

+0

Zobacz http://stackoverflow.com/questions/587488/handling-hierarchy-data-in-database –

Odpowiedz

20

Jest good-looking article na co mysql.com przedstawiając różne sposoby zarządzania danych hierarchicznych. Myślę, że zapewnia on pełne rozwiązanie twojego pytania i pokazuje różne, mniej proste, ale szybsze podejścia (np. Zestawy zagnieżdżone).

+3

+1 bardzo interesujący artykuł, który tutaj zamieściłeś. Artykuł –

+0

nie jest już dostępny. –

+0

@Ed the way back machine nadal go ma. Zaktualizowano. –

0

Od mysql sprawozdania może zwróć tylko dane o strukturze tabeli, jak wyobrażasz sobie zwrócony drzewostan?

Możliwe jest dokonanie wyboru za pomocą tabeli [parent_id, child_id], ale wymaga to tymczasowej tabeli i widziałem, że została wykonana w DB2, a nie w MySQL.

Sprawdź ten artykuł do realizacji na drzewiastej struktury przechowywanych w MySQL: http://articles.sitepoint.com/article/hierarchical-data-database/

1

MySQL brakuje natywną obsługę funkcji hierarchicznych, więc trzeba będzie naśladować je za pomocą zmiennych sesji, aby utrzymać stan rekurencji.

Zobacz ten artykuł o tym, jak wdrożyć funkcję: