Mijn probleem (in een makkelijkere voorbeeld):
Ik heb een 'artikel', dit artikel is gekoppeld aan verschillende categorieën. Door middel van een koppel tabel. Een artikel kan meerde categorieën bevatten.
Als ik nu een query uitvoer en alles wil uitlezen haalt ie alles netjes op, maar zodra er meerde categorieen (zeg: vijf) aan dat artikelen zijn gelinkt haalt ie ook vijf keer de artikel naam, het artikel id, enzovoorts op.
Is er een manier om dit in een kweerie op te lossen, of moet ik toch een tweede query uitvoeren?
11 JOIN's, dat is redelijk wat. Is het niet handiger om dit met sub-queries af te handelen? Wellicht kun je dan ook de dubbele resultaten er eenvoudig uithalen.
Zelf beperk ik de JOIN tot 3 a 4 stuks, dan vind ik het wel mooi geweest. Het komt de snelheid ook ten goede.
Ik bedenk me ineens dat jij MySQL versie 4.0 gebruikt, die kent geen subqueries...
In dat geval kun je wel vanuit PHP aparte queries uitvoeren en deze resultaten als input gebruiken voor de volgende queries. De functie IN() kan je daarbij behulpzaam zijn.
SELECT DISTINCT user_id FROM topics
Dit resultaat ga je fetchen en in een kommagescheiden string zetten: 23,68,75,5
SELECT username FROM users WHERE id IN(23,68,75,5)
De IN() krijgt het resultaat uit de eerste query als input. Werkt uitstekend!
Je had dit uiteraard ook met een JOIN kunnen oplossen, maar in complexe queries kan een (sub-) query handiger/overzichtelijker zijn.
Dank jullie wel voor jullie informatie.
IN() zal ik niet gaan gebruiken (waarschijnlijk), aangezien ik steeds een dump genereer.
Dan zullen het toch een aantal aparte querys worden! :(