2 qry naar 1
Code (php)
1
2
3
4
5
2
3
4
5
$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 .'"';
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
Gewijzigd op 04/08/2013 19:29:11 door Jan R
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
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
t.titel,
COUNT(DISTINCT l.uitvoerder) aantal
FROM
muziek_titels t
JOIN
muziek_liedjes l
USING (serieNR)
GROUP BY t.serieNR, t.titel
Gewijzigd op 05/08/2013 10:47:04 door Ger van Steenderen
Het een of het ander had ik al gevonden maar dan is het traag vind ik
Gewijzigd op 04/08/2013 21:00:10 door Jan R
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.
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
Gewijzigd op 05/08/2013 16:41:12 door Jan R
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
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.
Dit is het dus geworden :)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
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 t
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
Gewijzigd op 06/08/2013 07:35:33 door Jan R