Verschillende relaties in één query
Ik zit met een klein ontwerp-probleem voor mijn query's.
Stel ik heb een tabel vol fietsverkopers in mijn database. Daar is een tabel aan gekoppeld met alle soorten fietsen die de fietsverkopers verkopen.
Je hebt dan dus een veel op veel relatie.
Nu wil ik in een query alle fietsen ophalen die één bepaalde verkoper verkoopt. Bovendien wil ik ook informatie over de naam van de verkoper, het emailadres enzovoort.
Ik kom dan uit op zo'n soort query (dit is uit mijn hoofd, dus er kan een klein typefoutje in zitten):
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
verkoper.naam,
verkoper.adres,
fietsen.naam
FROM
verkoper
INNER JOIN
fietsenInteractie
ON
verkoper.id = fietsenInteractie.verkoperId
INNER JOIN
fietsen
ON
fietsen.id = fietsenInteractie.fietsenId
WHERE
verkoper.id = WAARDE UIT PHP
verkoper.naam,
verkoper.adres,
fietsen.naam
FROM
verkoper
INNER JOIN
fietsenInteractie
ON
verkoper.id = fietsenInteractie.verkoperId
INNER JOIN
fietsen
ON
fietsen.id = fietsenInteractie.fietsenId
WHERE
verkoper.id = WAARDE UIT PHP
Hier komen (uiteraard) een heleboel rows uit met allemaal dezelfde informatie over de verkoper, en steeds een andere naam voor de kolom fietsen.naam
Dit is heel lastig te verwerken in php, en bovendien is het een omslachtige manier van data ophalen.
Zelf zou ik zeggen: Maak eerst een query waar je alleen de informatie over de verkoper opvraagt, en vraag dan in een nieuwe query alle fietsen op. Het nadeel hier aan is natuurlijk wel dat je weer twee query's nodig heeft.
Dus mijn vraag is eigenlijk: Is hier een andere oplossing voor?
fiets_id | verkoper_id
Ik vraag me af of de TS daar genoeg aan heeft PHP Newbie ;-)
Het datamodel is er al (inclusief het koppeltabelletje waar je het over hebt, in mijn query fietsenInteractie genaamd).
Het probleem is nu alleen wat de beste manier is om het uit te lezen.
SELECT v.naam, f.merk
FROM verkopers AS v, fietsen AS f
RIGHT JOIN koppeltabel AS k
ON v.id = k.verkoper_id
RIGHT JOIN k
ON f.id = k.fiets_id
Het moet iets zijn dat er voor zorgt dat alle fietsen weer in een array zet.
Zodat je als het eenmaal bij php is belandt zo'n soort array hebt:
Code (php)
Aan zoiets zit ik dan tenminste te denken, maar misschien is er nog wel een andere efficiënte manier, maar anders moet het gewoon met twee query's.
In ieder geval bedankt voor je antwoord!
Gewijzigd op 01/01/1970 01:00:00 door Lasse
BUMP
zon 7 uur te vroeg (give or take)
Lasse schreef op 05.02.2008 20:53:
Dat zijn 2 aparte queries of je krijgt bij iedere record weer opnieuw de naam van de verkoper, het email adres van de verkoper, enzovoort. Je zult dan in je weergave moeten controleren of je de gegevens van de verkoper al hebt getoond, zo ja, dan niet nogmaals tonen.Nu wil ik in een query alle fietsen ophalen die één bepaalde verkoper verkoopt. Bovendien wil ik ook informatie over de naam van de verkoper, het emailadres enzovoort.
Met 2 aparte queries ben je beter af, 1 om de gegevens de verkoper op te halen en 1 om de fietsen van deze verkoper op te halen. Dat zou ook nog wel eens sneller kunnen zijn, de queries worden eenvoudiger. Het maakt tevens de weergave een stuk eenvoudiger.
Ik dacht dat er misschien nog een betere manier zou zijn, maar dan gaan we het doen met twee query's.