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 |
---------------------------------------------
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
|
|-B1
|-B2
| |
| |-B3
| | |
| | |-C1
| |
| |-B4
| |
| |-B5
| |
| |-C2
|
|-B6
|
|-C3
A2
|
|-B7
| |
| |-C4
|
|-B8