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:
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 ]