Koppeltabel haalt meerdere keren hetzelfde op

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jason de Ridder

Jason de Ridder

24/08/2007 11:07:00
Quote Anchor link
Niet echt duidelijke titel; excuus...

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
 
PHP hulp

PHP hulp

20/04/2024 18:07:21
 
Joren de Wit

Joren de Wit

24/08/2007 11:17:00
Quote Anchor link
Gebruik DISTINCT in je query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT DISTINCT artikel FROM ...
 
Jason de Ridder

Jason de Ridder

24/08/2007 11:23:00
Quote Anchor link
Helaas, dat maakt geen verschil.
 
Joren de Wit

Joren de Wit

24/08/2007 11:32:00
Quote Anchor link
Hoe ziet je query er nu uit?
 
- -

- -

24/08/2007 11:33:00
Quote Anchor link
GROUP BY artikel id
 
Jason de Ridder

Jason de Ridder

24/08/2007 11:36:00
Quote Anchor link
Nee Jonathan dat kan niet, want dan voegt ie ze samen. Ik wil wel alle waarden behouden. Gescheiden door een komma.
Ik had een leuke functie ervoor gevonden, maar helaas bestaat niet niet voor mijn versie MySQL (4.0). (Functie: GROUP_CONCAT() >= 4.1)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<!-- Niet meer relevant :) -->
Gewijzigd op 01/01/1970 01:00:00 door Jason de Ridder
 
- -

- -

24/08/2007 11:37:00
Quote Anchor link
Zoek een andere host, MySQL 5 is van dit moment.
 
Joren de Wit

Joren de Wit

24/08/2007 11:38:00
Quote Anchor link
Jonathan schreef op 24.08.2007 11:33:
GROUP BY artikel id
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.

Zie ook deze tutorial waarin ik inga op het juiste gebruik van GROUP BY.
 
Jason de Ridder

Jason de Ridder

24/08/2007 11:39:00
Quote Anchor link
Jonathan, niet iedereen draait alleen de website van de buurtsuper.
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 ;-)
 
Joren de Wit

Joren de Wit

24/08/2007 11:50:00
Quote Anchor link
Tja, DISTINCT zal inderdaad niet werken in deze query, aangezien je ook gegevens uit andere tabellen ophaalt.

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.
 
Jason de Ridder

Jason de Ridder

24/08/2007 12:05:00
Quote Anchor link
Een xml genereren, maar goed, anders zit er niks anders op dan 3 extra querys uit te voeren :(
 
Frank -

Frank -

24/08/2007 12:29:00
Quote Anchor link
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.
 
Jason de Ridder

Jason de Ridder

24/08/2007 12:30:00
Quote Anchor link
Ha Frank,

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!
Gewijzigd op 01/01/1970 01:00:00 door Jason de Ridder
 
Frank -

Frank -

24/08/2007 12:48:00
Quote Anchor link
Sorry, gaat niet! @#$%^&

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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT DISTINCT user_id FROM topics

Dit resultaat ga je fetchen en in een kommagescheiden string zetten: 23,68,75,5

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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.
 
Jason de Ridder

Jason de Ridder

24/08/2007 12:51:00
Quote Anchor link
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! :(

Nogmaals bedankt!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.