[ igor.vitorac @ 19.05.2012. 22:39 ] @

Zanima me koja je najbolja varijanta u MySQL-u da dobijem sve record-e koji su child-ovi nekog parenta, pri cemu moze da bude parent-child vise nivoa. Primer:

-Tabela A
-Tabela B
-Tabela A referencira B record, i.e. A.B_id
-Relacija izmedju A i B je many-to-one.
-U tabeli B ima parent_id koji referencira parent B record. Parent child referenciranje moze da bude nula do nekoliko nivoa.

E sad, treba da pravim odredjene report-ove koji na bazi selectovanog B record-a daju redove iz tabele A, ali isto tako da ukljuci i one redove iz tabele A koji referenciraju neki od child-ova B recorda koji mogu biti bilo kog nivoa, ako takvi postoje.

Ono sto sam do sad nasao je da to svakako moram koristiti stored proceduru, jer broj nivoa B parent-child nije definisan. Sta je u tom slucaju bolje raditi?
1. Kreirati kompletan upit u stored proceduri
2. Kreirati samo view ili neki temp table iz stored procedure koji ce dati sve B recorde koji su bazirani na selektovanom B parent record-u, pa posle raditi dodati dodatni join sa A tabelom.
3. Nesto trece?

Hvala unapred,
Igor
[ bogdan.kecman @ 20.05.2012. 16:38 ] @
napises create table ovo ono za te tabele koje te zanimaju, onda napises insert into ovo ono za te tabele koje te zanimaju i onda kazes kako oces da dobijes izlaz.... posto je ovo sto si napisao previse siroko
[ igor.vitorac @ 21.05.2012. 09:11 ] @
Citat:
bogdan.kecman: napises create table ovo ono za te tabele koje te zanimaju, onda napises insert into ovo ono za te tabele koje te zanimaju i onda kazes kako oces da dobijes izlaz.... posto je ovo sto si napisao previse siroko


Kad bolje pogledam sta sam napisao, tesko i da bi ja razumeo. :-)

Evo jedan od konkretnih slucajeva:
- Tabela Contacts
- Tabela Companies
- U tabeli Contacts postoji Contacts.company_id koji referencira Company record iz tabele Companies.
- Svaki kontakt moze imati pripadnost samo jednoj kompaniji.
- u tabeli Companies postoji Companies.parent_id koji referencira drugi Company record i.e. parent kompaniju kojoj pripada. Znaci postoji hijerarhija medju Company record-ima. E.g. hijerarhija
A_comp - B_comp - C_comp - D_comp
gde je A companija na samom vrhu hijerarhije.
-Contact record moze da pripada kompaniji bilo kog "nivoa"

Na osnovu izabranog Company record-a, moram da izlistam sve kontakte koji pripadaju izabranom Company record-u, kao i Company record-ima koji su sub-kompanije od selektovane.


Problem nastaje sto imam gomilu report-ova koji bi morali da listaju sve kontakte od selektovane kompanije kao i od njenih child kompanija, pri cemu nije isti query kao i JOIN-i za sve report-ove, pa me zanima sledece:
1. da li je bolje praviti zasebne stored procedure za svaki od report-ova koje bi ukljucivale sve neophodne JOIN-e?
2. da li je bolje napraviti view koji bi sadrzao listu svih child kompanija selektovane kompanije (ukljucujuci i nju samu), pa zatim praviti dodatne join-e sa ostalim neophodnim tabelama?
3. Nesto trece?

Hvala,
Igor