![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 178 Pomógł: 51 Dołączył: 7.01.2009 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Mam taka prostą tabelkę z kilkoma testowymi wartościami. I muszę takie zapytanie i nie wiem jak to zrobić. (IMG:http://ifotos.pl/img/zrzut-mys_xheepa.jpg) Chciałbym mieć podaną nazwy kategorii z ich przyporządkowaniem. Np. 4 -> 3 -> 1, 1 -> 3 oraz np. 1 -> 5. Muszę zrobić coś takiego (do tego jest potrzebne to zapytanie) kategoria 1 -->kategoria 2 ----->kategoria 3 ----->kategoria 7 ----->kategoria 8 -------->kategoria 9 -------->kategoria 10 -->kategoria 6 kategoria 4 kategoria 5 Coś na styl drzewka. Proszę o pomoc! ---------- Skoro żaden kolega nie chce pomoc, sprobowałem własnych sił. Wydziergałem:
Ten post edytował thomson89 23.12.2009, 18:35:24 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 58 Pomógł: 5 Dołączył: 12.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
W Oracle jest coś takiego jak CONNECT BY PRIOR. Nie wiem jak zrobić coś takiego w MySQL, ale ten CONNECT BY PRIOR w Oracle powinien tutaj pomóc. Poszukaj może w google itp. Jeżeli dobrze pamiętam to właśnie to generowało coś podobnego, co potrzebujesz (drzewko z węzłami...)
Krótki przykład: Podac dla pracownika o numerze 7369 jego zwierzchnikow oraz numer wezla SELECT EMPNO, ENAME, level FROM EMP CONNECT BY PRIOR mgr=empno START WITH empno=7369; Nie jestem pewien, czy to jest coś takiego w 100%, ale powinno dać jakieś natchnienie. ;-) Pozdrawiam. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 1 Dołączył: 28.05.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Po pierwsze w Twojej tabeli pole `poziom` jest raczej zbędne, na pewno nie jest potrzebne do wygenerowania struktury drzewa, wynika ona z samego powiązania `id` i `id_kategorii_wyzszej`. Kwestia prostoty: zamiast `id_kategorii_wyzszej` użyj pola o nazwie `pid` (od `parent id`), które będzie indeksowane, np:
Po drugie zawsze należy dążyć do ograniczenia ilości zapytań wysyłanych do bazy danych: w miarę wzrostu ich ilości komunikacja z serwerem baz danych staje się wąskim gardłem aplikacji. Strukturę drzewiastą można wygenerować za pomocą samego PHP (gwarantuję Ci, że będzie to działało kilka razy szybciej, wielokrotnie się o tym przekonałem) i tylko JEDNEGO zapytania do bazy danych. Aby to zrobić musimy zbudować w PHP tablicę, wykonując małą sztuczkę z polem `pid`: każdy kolejny rekord pobrany z bazy danych, wczytujemy do 'tablica[pid]', dzięki czemu zgromadzimy w jednym miejscu wszystkie elementy o danych pid i będziemy mogli je łatwo pobrać z tablicy. Taką możliwość daje nam niezwykła elastyczność tablic w PHP.
Jeżeli piszesz na klasach (obiektowo) to bardziej zaciekawi Cię ta wersja:
W obu wypadkach wynik będzieidentyczny: Kategoria 1 Kategoria 2 -->Kategoria 2.1 -->Kategoria 2.2 ---->Kategoria 2.2.1 ---->Kategoria 2.2.2 ---->Kategoria 2.2.3 -->Kategoria 2.3 Kategoria 3 Kategoria 4 -->Kategoria 4.1 Kategoria 5 Ten post edytował za017 23.12.2009, 23:12:00 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 02:31 |