[mysql] Tabellen linken met select: data minimaliseren?

Pagina: 1
Acties:
  • 128 views sinds 30-01-2008
  • Reageer

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Ik heb een MySQL database met 1 hoofdtabel en daarbij 5 tabellen die linken naar de hoofdtabel - via het id.

Bijvoorbeeld: hoofdtabel: MAIN, en 5 andere tabellen: A, B, C, D en E, die naar MAIN linken. Het kan voorkomen dat bijvoorbeeld 3 rows van A, 3 rows van B en 2 rows van C aan 1 row in MAIN hangen.

Ik wil nu met zo min mogelijk queries de gegevens uit de database halen. Nu doe ik dat met een query met 5x een left join erin. Dit werkt prima, alleen is het probleem bij het voorbeeld wat ik net gaf, dat er dus 1 x 3 x 3 x 2 = 18 rows binnenkomen voor 1 bij elkaar horende dataset.

MySQL geeft dan de info als volgt door:
MAIN[row 1], A[row 1], B[row 1], C[row 1], null, null
MAIN[row 1], A[row 1], B[row 1], C[row 2], null, null
MAIN[row 1], A[row 1], B[row 2], C[row 1], null, null
MAIN[row 1], A[row 1], B[row 2], C[row 2], null, null
MAIN[row 1], A[row 1], B[row 3], C[row 1], null, null
MAIN[row 1], A[row 1], B[row 3], C[row 2], null, null
MAIN[row 1], A[row 2], B[row 1], C[row 1], null, null
etc...

In die rows zitten dan ook nog eens vrij veel velden en dit is nog maar een gemiddeld voorbeeld. Dus de hoeveelheid gegevens die MySQL uitspuugt is enorm!

Hoe moet ik de query opstellen zodat de info wat sneller binnenkomt? Dus zo zeg maar:
MAIN[row 1], A[row 1], B[row 1], C[row 1], null, null
null, A[row 2], B[row 2], C[row 2], null, null
null, A[row 3], B[row 3], null, null, null

Zo zou ik in het voorbeeld maar 3 rijen met info binnenkrijgen om 1 dataset compleet te krijgen, ipv. 18 rijen zoals nu met de left join's. Kan dit en zo ja hoe moet dit? Ik ben niet zo'n held met al die verschillende join's in MySQL...

Bij voorbaat dank voor de hulp! _/-o_

Edit: hier een voorbeeld van de huidige query:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
select
    t1.id,
    unix_timestamp(t1.date) as date,
    t1.foo1,
    t1.bar1,
    t2.foo2,
    t2.bar2,
    t3.foo3,
    t4.foo4,
    t4.bar4,
    t5.foo5,
    t6.foo6
from
    main as t1
left join
    table_a as t2 on t1.id = t2.id_main
left join
    table_b as t3 on t1.id = t3.id_main
left join
    table_c as t4 on t1.id = t4.id_main
left join
    table_d as t5 on t1.id = t5.id_main
left join
    table_e as t6 on t1.id = t6.id_main
order by
    t1.id

[ Voor 14% gewijzigd door Explore op 27-10-2003 15:46 ]

[ specs ] [ Tweaker gallery ]


  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Heerlijk altijd die response op mijn vragen... :| Is dit een stomme vraag, kan het niet wat ik wil of weet niemand een oplossing?

[ specs ] [ Tweaker gallery ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

Heej meneertje ongeduld, wat ben je nou aan het doen, een antwoord aan het eisen ofzo? Als je een antwoord wilt dan zou ik me toch wat vriendelijker opstellen, want degene die moeten antwoorden doen dat nog altijd vrijwillig. Maar goed, je hebt uiteindelijk alleen jezelf ermee...

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Ehm, neehoor, ik eis niks. De vraag staat er al 24 uur en ik vroeg me af hoe het komt dat er niemand antwoord. Met een 'dit kan niet' was ik al content geweest. :)

Maargoed, excuus voor het zetten van de verkeerde toon. Ik bedoel er niks mee.

[ specs ] [ Tweaker gallery ]


  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
probeer eens
code:
1
a LEFT JOIN b USING (c1,c2,c3)

of
code:
1
a LEFT JOIN b ON a.c1=b.c1 AND a.c2=b.c2 AND a.c3=b.c3


of schiet ik nou helemaaaal mis?

edit:

nog maar een subtiel linkje naar de manual

[ Voor 30% gewijzigd door PrisonerOfPain op 28-10-2003 16:55 ]