hoi, ik heb de volgende query:
Resultset levert circa 30 results, met per record gemiddeld 400 artikelen en 700 gerelateerde objecten. Als ik DISTINCT echter weglaat, wordt duidelijk hoe de JOINs uitgevoerd worden: per hoofdrecord (1 van de 30) worden eerst de 400 artikelen-rijen opgehaald en opgeteld. Vervolgens voor elk artikel-rij een objecten-rij opgehaald: resultaat: 400x700 = 280000 gevonden artikelen evenals gerelateerde objecten.
Hoe kan ik MySQL (4.1) nou vertellen dat-ie voor elk van de 30 hoofdresultaten 1x 400 artikelen ophaal en 1x 700? Of ben ik genoodzaakt de query als 3 losse queries te doen - eerst de hoofdquery, vervolgens een query voor alle gerelateerde artikelen bij de 30 hoofdrijen, tot slot een query voor alle gerelateerde objecten bij de 30 hoofdrijen?
SQL:
1
2
3
4
5
6
7
8
9
10
11
| SELECT main.id 'main_object_id', COUNT(DISTINCT art.id) 'related_articles', COUNT(DISTINCT rel.object_id) 'related_objects' FROM objects 'main' LEFT JOIN articles 'art' ON art.object_id = main.id LEFT JOIN objects_rel 'rel' ON rel.object_source_id = main.id WHERE main.name LIKE 'bouw%' GROUP BY main.id |
Resultset levert circa 30 results, met per record gemiddeld 400 artikelen en 700 gerelateerde objecten. Als ik DISTINCT echter weglaat, wordt duidelijk hoe de JOINs uitgevoerd worden: per hoofdrecord (1 van de 30) worden eerst de 400 artikelen-rijen opgehaald en opgeteld. Vervolgens voor elk artikel-rij een objecten-rij opgehaald: resultaat: 400x700 = 280000 gevonden artikelen evenals gerelateerde objecten.
Hoe kan ik MySQL (4.1) nou vertellen dat-ie voor elk van de 30 hoofdresultaten 1x 400 artikelen ophaal en 1x 700? Of ben ik genoodzaakt de query als 3 losse queries te doen - eerst de hoofdquery, vervolgens een query voor alle gerelateerde artikelen bij de 30 hoofdrijen, tot slot een query voor alle gerelateerde objecten bij de 30 hoofdrijen?
[ Voor 7% gewijzigd door js303 op 22-11-2007 16:13 ]