Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 426 Pomógł: 32 Dołączył: 24.05.2007 Ostrzeżenie: (0%)
|
Powiedzmy ze mam tabele kategorie a w niej pola id i parent
id|parent 1 |0 2 |1 3 |1 4 |2 5 |4 6 |4 7 |5 no i powiedzmy ze pobralem element o id 7, jak najlepiej wykonac zapytanie zeby zwrocilo mi wszystkich rodzicow w poprawnej kolejnosci, tj 5,4,2,1 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 295 Pomógł: 7 Dołączył: 26.03.2004 Skąd: Opole Ostrzeżenie: (0%)
|
To ciekawe zagadnienie topologiczne i przykład jak w małej prostej tabeli można zapisać dowolnie złożona strukturę powiązań typu - potomek-rodzic. Wbrew pozorom (jak dla mnie) wydobycie takiej sekwencji nie jest proste. Na myśl przychodzi analogia do przetwarzania dokumentów XML. Wg mnie jednym zapytaniem SQL tego nie zrobisz. Możesz napisać zapytanie, które dojdzie do pewnego poziomu, ale będzie to z góry założona liczba poziomów.
Musisz przejść przez wszystkie poziomy rekurencyjnie. Najprościej chyba napisać pętle w php, która będzie wybierać dla danego potomka jego rodzica, w następnym przebiegu rodzica z poprzedniej pętli będzie traktować jako potomka, pobierze dla niego rodzica i tak w kółko tak długo aż zostanie spełniony warunek dotarcia "na powierzchnię" czyli parent = 0 kiedy to pętla zakończy działanie a przechwycone do pomocniczej zmiennej numery rodziców można złozyć w ostateczną "ścieżkę genealogiczną". Mozliwe też, że cos takiego mozna zapisać w postaci procedury w samym SQL'u. Tam też można składać pętle. |
|
|
|
deirathe Jak najoptymalniej wykonac zapytanie SQL 23.01.2008, 16:34:46
SirZooro Poczytaj te artykuły:
Managing Hierarchical Data i... 23.01.2008, 16:59:06
deirathe No wlasnie to drugie rozwiazanie jest malo optymal... 23.01.2008, 17:05:52
Indeo W takim razie może być jeszcze prościej. Zastanówm... 23.01.2008, 17:34:53
deirathe to jest dość dobry pomysł, ale co w wypadku gdy ak... 24.01.2008, 16:53:22
bim2 Można spróbować pobrać to do tablicy $array[... 24.01.2008, 17:59:45
deirathe czyli pobrać całą tabelę do tablicy? 24.01.2008, 23:01:06
bim2 Tak, dziś podrzucę kod, ale teraz jest za wcześnie... 25.01.2008, 00:40:47
Indeo To proste w przypadku zmiany musisz mieć skrypt, k... 25.01.2008, 12:46:56
deirathe "chili", robimy sobie tabele:
id|path|na... 25.01.2008, 13:29:21
bim2 [PHP] pobierz, plaintext <?phppublic function s... 25.01.2008, 16:23:43 ![]() ![]() |
|
Aktualny czas: 26.12.2025 - 23:14 |