Hallo,
Ik zit met een vraag over een left join. Ik heb de volgende query:
Deze query haalt een aantal gegevens uit twee tabellen en toont bijvoorbeeld het volgende (merk - type - variatie - voorraad):
PowerCord - Voedingskabel Expert - 3 meter - 5
PowerCord - Voedingskabel Expert - 5 meter - 1
PowerCord - Voedingskabel Premium - 25 meter - 99
Per artikel is er minimaal 1 variatie zoals in bovenstaand overzicht ook te zien is. Er zijn nog twee andere tabellen, TBLbestelling waar alle bestellingen inkomen (NAW gegevens, datum o.a.) en TBLbestelling_artikel waar per bestelling de producten (met het variatie_id) worden ingezet.
Nu wil ik aan de hand van een LEFT JOIN twee stappen ondernemen:
- met een left join TBLbestelling_artikel koppelen en het totaal aantal keer dat een variatie is besteld met een sum() selecteren. Sommige variaties zullen nog nooit besteld zijn en dan zal er een NULL waarde uitkomen.
- in dezelfde left join ook TBLbestelling koppelen om zodoende alleen de bestellingen door te lopen die voldoen aan datum criteria. Aangezien de datum alleen in TBLbestelling en niet in TBLbestelling_artikel staat, dient TBLbestelling ook gekoppeld te worden.
Ik heb nu de volgende query die geen errors geeft, maar die er wel voor zorgt dat de MySQL daemon 100% CPU tijd gaat trekken en na 5 tot 10 minuten nog geen spoor van resultaat geeft zelfs met een LIMIT 1 op de query.
Heeft iemand een idee of ik uberhaupt een sum() kan doen op een tabel die ik via een left join heb toegevoegd? Of iemand die een idee heeft wat ik in godsnaam fout doe?
Ik zit met een vraag over een left join. Ik heb de volgende query:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| SELECT V.voorraad, A.merk, A.type, V.variatie FROM TBLartikel A, TBLvariatie V WHERE V.voorraad > 0 AND V.artikelid = A.artikelid ORDER BY A.merk, A.type, V.variatie |
Deze query haalt een aantal gegevens uit twee tabellen en toont bijvoorbeeld het volgende (merk - type - variatie - voorraad):
PowerCord - Voedingskabel Expert - 3 meter - 5
PowerCord - Voedingskabel Expert - 5 meter - 1
PowerCord - Voedingskabel Premium - 25 meter - 99
Per artikel is er minimaal 1 variatie zoals in bovenstaand overzicht ook te zien is. Er zijn nog twee andere tabellen, TBLbestelling waar alle bestellingen inkomen (NAW gegevens, datum o.a.) en TBLbestelling_artikel waar per bestelling de producten (met het variatie_id) worden ingezet.
Nu wil ik aan de hand van een LEFT JOIN twee stappen ondernemen:
- met een left join TBLbestelling_artikel koppelen en het totaal aantal keer dat een variatie is besteld met een sum() selecteren. Sommige variaties zullen nog nooit besteld zijn en dan zal er een NULL waarde uitkomen.
- in dezelfde left join ook TBLbestelling koppelen om zodoende alleen de bestellingen door te lopen die voldoen aan datum criteria. Aangezien de datum alleen in TBLbestelling en niet in TBLbestelling_artikel staat, dient TBLbestelling ook gekoppeld te worden.
Ik heb nu de volgende query die geen errors geeft, maar die er wel voor zorgt dat de MySQL daemon 100% CPU tijd gaat trekken en na 5 tot 10 minuten nog geen spoor van resultaat geeft zelfs met een LIMIT 1 op de query.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| SELECT V.voorraad, A.merk, A.type, V.variatie, sum(BA.aantal) FROM TBLartikel A, TBLvariatie V LEFT JOIN TBLbestelling_artikel BA ON (BA.variatieid = V.variatieid) WHERE V.voorraad > 0 AND V.artikelid = A.artikelid AND (BA.variatieid > 0 OR BA.variatieid IS NULL) GROUP BY BA.variatieid ORDER BY A.merk, A.type, V.variatie |
Heeft iemand een idee of ik uberhaupt een sum() kan doen op een tabel die ik via een left join heb toegevoegd? Of iemand die een idee heeft wat ik in godsnaam fout doe?
edit:
De group by stond per ongeluk op aantal, dit moet uiteraard variatieid zijn.
De group by stond per ongeluk op aantal, dit moet uiteraard variatieid zijn.
[ Voor 5% gewijzigd door Verwijderd op 03-02-2005 10:00 . Reden: Er staat een fout in de topictitel, kan een modje dat veranderen? Count moet Sum zijn.. ]