![]() ![]() |
Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 1 Dołączył: 3.08.2008 Skąd: Radom Ostrzeżenie: (0%)
|
Mam pewien problem!
Wyobraźcie sobie baze danych w której w jednej tabeli jest drzewiasta struktóra. Chodzi o to, że każdy element może zawierać być przypisany do innego elementu - rodzica. Ta struktura to ma być drzewko zawierające menu dla stronki www. Każdy element posiada id, nazwe i id_rodziaca, jeżeli id_rodzica=0 to znaczy, że element należy do korzenia drzewa. Przykład:
...i tak można sobie zagnieżdzać, z tym, że każdy element może mieć wielu sąsiadów. Problem polega na tym, żeby mając do dyspozycji id dowolnego elementu pobrać jednym zapytaniem sql wszystkich jego sąsiadów, rodzica i sąsiadów rodzica i tak w górę drzewa aż do węzła 0. Próbowałem SUBQUERY SELECT ale za każdym razem może być inna głębokość drzewa, może jakąś funkcję sql trzeba napisać? Pomocne wszystkie wskazówki albo łącze do jakiegoś rozwiązania. Dzięki! -------------------- Anti-loyal: xp; ubuntu; c++; asm; php 5.2; mysql 5.1; apache 2.2; vs '08 con vs.php; Zend S.
|
|
|
|
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 340 Pomógł: 49 Dołączył: 3.07.2009 Skąd: Rzeszów Ostrzeżenie: (0%)
|
Problem znany od barddzo dawna
Przy takiej strukturze aż się prosi o rekurencję i tak to należy zrobić. Można po stronie serwera mysql - jako funkcję , a można po stronie skryptu php. Złotego środka w postaci jednego zapytania i wyświetlania wyników niestety nie będzie. Jeżeli to jest mała tabela np z menu rozwijanym, to pobierz wszystkie rekordy i rekurencyjnie obrób w php Jeżeli natomiast jest to duża tabela (lub rosnąca), to lepiej przemyśl zmianę struktury lub dodaj więcej pól (np id korzenia) |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 1 Dołączył: 3.08.2008 Skąd: Radom Ostrzeżenie: (0%)
|
Właśnie nie jestem pewien jak taką funkcję napisać - po stronie serwera MySql.
Próbowałem coś takiego:
@pid - parent_id @v - do testowania czy nie doszło do korzenia w @vx - próbowałem rzechować rezultat ostatniego selecta, ale już wiem, że to musi buć jedna kolumna i jeden wiersz i najlepiej skalar - nie działa kombinowałem jeszcze w pętli @wyjście UNION SELECT costam... Oczyiście nie działa. Czy w pętli mogę jakoś użyć UNION, żeby przechowywać wynik z SELECTa w poprzednim obrocie pętli? Ten post edytował php1983 2.07.2013, 18:29:40 -------------------- Anti-loyal: xp; ubuntu; c++; asm; php 5.2; mysql 5.1; apache 2.2; vs '08 con vs.php; Zend S.
|
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 340 Pomógł: 49 Dołączył: 3.07.2009 Skąd: Rzeszów Ostrzeżenie: (0%)
|
może gotowiec z netu?
http://explainextended.com/2009/03/17/hier...eries-in-mysql/ |
|
|
|
![]() ![]() |
|
Aktualny czas: 20.08.2025 - 01:41 |