Koppeltabel haalt meerdere keren hetzelfde op
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?
Alvast bedankt maar weer!
- Jason
Helaas, dat maakt geen verschil.
Hoe ziet je query er nu uit?
GROUP BY artikel id
Ik had een leuke functie ervoor gevonden, maar helaas bestaat niet niet voor mijn versie MySQL (4.0). (Functie: GROUP_CONCAT() >= 4.1)
Gewijzigd op 01/01/1970 01:00:00 door Jason de Ridder
Zoek een andere host, MySQL 5 is van dit moment.
Jonathan schreef op 24.08.2007 11:33:
Nee, GROUP BY gebruik je dus niet om unieke resultaten op te halen. Een GROUP BY gebruik je om resultaten te groeperen en vervolgens informatie over die groep te kunnen verkrijgen. Unieke resultaten verkrijg je in principe met DISTINCT.GROUP BY artikel id
Zie ook deze tutorial waarin ik inga op het juiste gebruik van GROUP BY.
Wat ik bedoel te zeggen is dat het niet makkelijk is om +/- 400 databases om te zetten naar MySQL 5. Zeker niet als je verantwoordelijk bent voor een heleboel gevoelige data.
Daarnaast is de systeembeheerder op vakantie ;-)
Wat DISTINCT doet is het filteren van dubbele resultaten, maar de rijen in de resultaatset van deze query zijn allemaal uniek. Waarvoor wil je deze query gebruiken, want wellicht is er een oplossing voor.
Een xml genereren, maar goed, anders zit er niks anders op dan 3 extra querys uit te voeren :(
Zelf beperk ik de JOIN tot 3 a 4 stuks, dan vind ik het wel mooi geweest. Het komt de snelheid ook ten goede.
Kan je me even een klein zetje in de goede richting geven?
Ik ben vrij nieuw met de ietwat complexere querys 8-|
Alvast bedankt!
Edit:
alsvast? alsvast? dat bestaat niet hoor!
alsvast == nietlos, confusing!
alsvast? alsvast? dat bestaat niet hoor!
alsvast == nietlos, confusing!
Gewijzigd op 01/01/1970 01:00:00 door Jason de Ridder
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.
Dit resultaat ga je fetchen en in een kommagescheiden string zetten: 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.
IN() zal ik niet gaan gebruiken (waarschijnlijk), aangezien ik steeds een dump genereer.
Dan zullen het toch een aantal aparte querys worden! :(
Nogmaals bedankt!