Hallo (deze keer in 't Nederlands
),
ik heb een probleem met een MySQL query tussen 2 tabellen.
Eerst even schetsen hoe mijn tabellen eruit zien.
table 1: tblrelateds
id | predecessor | successor
1 | item1 | item2
2 | item1 | item3
3 | item4| item 5
table 2: tblitems
id | status | attribuut
item1 | A | 1
item2 | B | 2
item3 | C | 3
item4 | B | 1
item5 | A | 3
Ik zou graag de volgende query hebben:
geef me alle items in status "A" en attribuut "1" die gerelateerd zijn aan de items in status "B" en attribuut "2".
"Gerelateerd" betekent hier:
Om het niet te moeilijk te maken is de diepte van de boom slechts 1.
Dus een opvolger kan zelf geen voorganger zijn in een andere relatie.
Ik heb volgende query geprobeerd:
select rel1.predecessor, tblitems.id, second.id from tblpr
join tblitems as second on second.status='B' and second.attribuut='2'
join tblrelateds as rel1 on
(rel1.predecessor=tblitems.id or rel1.successor=tbitems.id)
join tblrelateds as rel2 on
(rel2.predecessor=second.id or rel2.successor=second.id)
where tblitems.status='A' and tblitems.attribuut='1'
and rel1.predecessor=rel2.predecessor
Als ik deze laat lopen op een database met meer dan 100.000 records duurt dit behoorlijk lang. Zo lang dat ik het proces na iets meer dan een minuut heb afgebroken.
Is mijn query correct? En indien ja, kan dit niet sneller?
ik heb een probleem met een MySQL query tussen 2 tabellen.
Eerst even schetsen hoe mijn tabellen eruit zien.
table 1: tblrelateds
id | predecessor | successor
1 | item1 | item2
2 | item1 | item3
3 | item4| item 5
table 2: tblitems
id | status | attribuut
item1 | A | 1
item2 | B | 2
item3 | C | 3
item4 | B | 1
item5 | A | 3
Ik zou graag de volgende query hebben:
geef me alle items in status "A" en attribuut "1" die gerelateerd zijn aan de items in status "B" en attribuut "2".
"Gerelateerd" betekent hier:
- het ene item is de voorganger (predecessor), het andere de opvolger (successor)
- beide zijn opvolger (successor) van een andere voorganger (predecessor)
Om het niet te moeilijk te maken is de diepte van de boom slechts 1.
Dus een opvolger kan zelf geen voorganger zijn in een andere relatie.
Ik heb volgende query geprobeerd:
select rel1.predecessor, tblitems.id, second.id from tblpr
join tblitems as second on second.status='B' and second.attribuut='2'
join tblrelateds as rel1 on
(rel1.predecessor=tblitems.id or rel1.successor=tbitems.id)
join tblrelateds as rel2 on
(rel2.predecessor=second.id or rel2.successor=second.id)
where tblitems.status='A' and tblitems.attribuut='1'
and rel1.predecessor=rel2.predecessor
Als ik deze laat lopen op een database met meer dan 100.000 records duurt dit behoorlijk lang. Zo lang dat ik het proces na iets meer dan een minuut heb afgebroken.
Is mijn query correct? En indien ja, kan dit niet sneller?