$sql2='SELECT muziek_titels.SerieNR, muziek_titels.Titel, muziek_types.Tekst, muziek_titels.Prijs, DATE_FORMAT(muziek_titels.gekocht, "%d-%m-%Y"), muziek_labels.Tekst
					FROM muziek_types right JOIN (muziek_labels right JOIN muziek_titels ON muziek_labels.ID = muziek_titels.LabelID) ON muziek_types.ID = muziek_titels.TypeID order by muziek_titels.Titel;';


$sql2='Select count(distinct uitvoerder), uitvoerder as aantal from muziek_liedjes where serienr="' . $SerieNR .'"';


Hoe kan ik dit in 1 keer uitvoeren
Dit zijn mijn velden en relatie welke ik in Acces gebruikte

Ik wil dus bij elke titel weten hoeveel verschillende uitvoerders er zijn.

Jan

SELECT t.serieNR,
	t.titel,
	COUNT(DISTINCT l.uitvoerder) aantal
FROM
	muziek_titels t
JOIN
	muziek_liedjes l
	USING (serieNR)
GROUP BY t.serieNR, t.titel
Bedankt maar dan verlies ik de andere velden.

Het een of het ander had ik al gevonden maar dan is het traag vind ik
Jan, dit was een voorbeeld, je kan dit naar believen uitbreiden met meerdere velden en of tabellen.
Dit kan nooit trager zijn dan voor elke titel een query uit te voeren voor het aantal uitvoerders.
Ik zie trouwens dat ik de DISTINCT vergeten was in het voorbeeld, zal het even aanpassen.
Hoi, Ger,

Normaal gezien heb ik hier geen probleem mee maar gezien de al 3 joins en nu nog een group by kom ik er niet uit om alle velde welke ik nodig heb in orde te krijgen. ofwel heb ik 0 records ofwel een paar duizend ipv 7à8 honderd

Toch in elke geval bedankt om mee te helpen.

Jan
Oké, een wat uitgebreider voorbeeld dan

SELECT
	serieNR,
	t.titel,
	COUNT(DISTINCT l.uitvoerder) aantal,
	ty.Tekst,
	la.Tekst la_tekst
FROM
	muziek_titels t
JOIN
	muziek_liedjes l
 	USING (serieNR)
LEFT JOIN
	muziek_labels la
	ON t.LabelID = la.ID
LEFT JOIN
	muziek_types ty
	ON l.TypeID = ty.ID
GROUP BY
	serieNR, t.titel, ty.Tekst, la_tekst	

Je ziet dus dat ik de volgorde heb omgedraaid en een LEFT ipv van een RIGHT JOIN gebruikt hebt, dat maakt het opbouwen van een query wat eenvoudiger (terugdenken is eenvoudiger - in ieder geval voor mij ;-)- dan vooruitdenken).
In jouw geval heb alle joins op de muziek titels dus hoef je geen geneste joins te gebruiken, het uiteindelijke resultaat is hetzelfde alleen is dit makkelijker te lezen.
Heel hartelijk Bedankt Ger,

Dit is het dus geworden :)

SELECT
	serieNR,
	t.titel,
	COUNT(DISTINCT l.uitvoerder) aantal,
	ty.Tekst,
	la.Tekst la_tekst,
	Prijs,
	DATE_FORMAT(gekocht, "%d-%m-%Y"),
	l.uitvoerder
FROM
	muziek_titels t
JOIN
	muziek_liedjes l
	 USING (serieNR)
LEFT JOIN
	muziek_labels la
	ON t.LabelID = la.ID
LEFT JOIN
	muziek_types ty
	ON t.TypeID = ty.ID
GROUP BY
	serieNR, t.titel, ty.Tekst, la_tekst


Klein foutje: ON tl.TypeID = ty.ID Dat was om me te testen? :)
Jan

PS Op deze manier is het dus vele malen sneller dan voorheen. 1qry per lijn + 1 voor de totale tabel tegenover 1 als totaal

Reageren