Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wielokrotnie zagnieżdżone relacje kilku tabel, Jak zminimalizować ilość zapytań do bazy
Snoopy
post
Post #1





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 5.02.2006

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


Witam,

mam w bazie danych kilka tabel (A, B, C itp.). W każdej tableki są rekordy posiadające unikatowy ID oraz ID rekordu w innej lub tej samej tabeli do którego on przynależy i tak według poniższego schematu: dla rekordu id 1 tabeli C, nadrzędnym rekordem jest rekord o ID 3 z tabeli B. Dla niego zaś nadrzędnym jest rekord z tej samej tabeli ale o ID 2. Ten rekord posiada nad sobą kolejny ale już z tabeli A i na tym koniec. Obrazuje to drzewko które paskudnie naskrobałem poniżej. Sprawa wygląda tak. Mam 3 klasy w php aObj, bObj i cObj. stworzyłem na ich podstawie tyle obiektów ile jest rekordów w danej tabeli ale tylko te których id_a= np. 1

więc mam obiekt objA[0], objB[0-5] i objC[0-2]

wszystko pięknie ale chciałbym uzyskać właśnie takie drzewko. Nie wiem za bardzo jak połączyć obiekty ze sobą. Mógłbym zacząć tworzyć zapytania do MySQL kaskadowo zaczynając od pierwszego najwyższego węzła aż do tabeli C ale w takim przypadku byłoby mnóstwo zapytań na każdym szczeblu.

Wydaje mi się że 3 zapytania i wrzucenie w obiekty każdego rekordu celem późniejszej dalszej obróbki jest wydajniejsze i szybsze niż ciągłe odpytywanie bazy danych o kolejny rekord. Tu pytam o całą tabelę a w poprzednim wypadku musiałbym przy każdym nowym rekordzie zadawać bazie nowe zapytanie.

Mój problem to właśnie ta późniejsza obróbka. Każdy obiekt jest elementem tablicy (np. aObj[2]) żeby przypisać do niego element musiałbym przeszukać całą tablicę gdzie aObj[$i]->id_a == cośtam

to też nie wydaje się szybkie. Przypomina funkcje sortujące które do najwydajniejszych nie należą.

Jak to ugryźć?

Kod
A    |B                 |C
---------------------------------------------
id_a | id_b id_b* id_a  | id_c id_b id_a
---------------------------------------------
   1 |    1          1  |    1    3    1
   2 |    2          1  |    2    5    1
     |    3    2     1  |    3    6    1
     |    4    2     1  |    4    7    2
     |    5    4     1  |
     |    6          1  |
     |    7          2  |
     |    8          2  |



Jako drzewko, wygląda to docelowo tak:

Kod
A1
|
|-B1
|-B2
| |
| |-B3
| | |
| | |-C1
| |
| |-B4
|   |
|   |-B5
|     |
|     |-C2
|
|-B6
  |
  |-C3

A2
|
|-B7
| |
| |-C4
|
|-B8
Go to the top of the page
+Quote Post

Posty w temacie


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: 25.08.2025 - 02:43