Hallo,
Ik ben al een paar dagen bezig met het bouwen van een query, maar ik kom er nog steeds niet helemaal uit. Ik heb nooit veel gebruik gemaakt van bijvoorbeeld de JOIN-syntax, misschien begrijp ik die nog niet goed genoeg.
Ik zal even proberen uit te leggen wat de structuur van de tabellen in kwestie is (het zijn voorbeelden / fictieve tabellen, de echte tabellen hebben een ander doel / andere data), en watvoor resultaat de query moet geven.
Er zijn vier tabellen waar de query gebruik van moet maken:
Elk model heeft één bepaalde kleur en een voorraadindicatie. De kleur staat in de tabel 'TBL_kleuren' en de voorraad in 'TBL_voorraad'. Elk model kan bij meerdere winkels op voorraad zijn, maar ik wil alleen de gene met de meeste voorraad zien.
De bijbehorende kleur kan worden opgehaald door de kolom 'model_Kleur_Id' uit tabel 'TBL_modellen' gelijk te stellen aan de kolom 'kleur_ID' uit de tabel 'TBL_kleuren'.
De bijbehorende voorraad kan worden opgehaald door de kolom 'voorraad_Model_ID' gelijk te stellen aan de kolom 'model_ID' uit tabel 'TBL_modellen'.
De query die ik tot dusver heb bedacht gaat als volgt:
Deze query resulteert in een lijst die redelijk lijkt op wat ik nodig heb, maar is nog niet goed genoeg aangezien het veel te veel data resulteert.
Wat nog niet goed is aan de query:
Helaas is het me nog niet gelukt om deze twee mankementen in orde te krijgen, ik heb geen flauw idee hoe ik dat voor elkaar kan krijgen. Ik heb al hier en daar een LIMIT erachter geprobeerd te zetten maar dat geeft niet het gewenste effect...
Excuus voor deze belachelijk grote post, ik hoop dat iemand het voorbeeld kan begrijpen, anders probeer ik nog meer tekst en uitleg te geven!
Ik ben al een paar dagen bezig met het bouwen van een query, maar ik kom er nog steeds niet helemaal uit. Ik heb nooit veel gebruik gemaakt van bijvoorbeeld de JOIN-syntax, misschien begrijp ik die nog niet goed genoeg.
Ik zal even proberen uit te leggen wat de structuur van de tabellen in kwestie is (het zijn voorbeelden / fictieve tabellen, de echte tabellen hebben een ander doel / andere data), en watvoor resultaat de query moet geven.
Er zijn vier tabellen waar de query gebruik van moet maken:
- TBL_producten
- TBL_modellen
- TBL_kleuren
- TBL_voorraad
Elk model heeft één bepaalde kleur en een voorraadindicatie. De kleur staat in de tabel 'TBL_kleuren' en de voorraad in 'TBL_voorraad'. Elk model kan bij meerdere winkels op voorraad zijn, maar ik wil alleen de gene met de meeste voorraad zien.
De bijbehorende kleur kan worden opgehaald door de kolom 'model_Kleur_Id' uit tabel 'TBL_modellen' gelijk te stellen aan de kolom 'kleur_ID' uit de tabel 'TBL_kleuren'.
De bijbehorende voorraad kan worden opgehaald door de kolom 'voorraad_Model_ID' gelijk te stellen aan de kolom 'model_ID' uit tabel 'TBL_modellen'.
De query die ik tot dusver heb bedacht gaat als volgt:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| SELECT p.product_ID, p.product_Naam, m.model_Product_ID, m.model_ID, m.model_Kleur_ID, m.model_OpSite, k.kleur_ID, k.kleur_Naam, v.voorraad_Model_ID, v.voorraad_Winkel FROM ((TBL_producten AS p LEFT JOIN TBL_modellen AS m ON p.product_ID = m.model_Product_ID LEFT JOIN TBL_kleuren AS k ON m.model_Kleur_ID = k.kleur_ID LEFT JOIN TBL_voorraad AS v ON m.model_ID = v.voorraad_Model_ID )) ORDER BY p.product_Naam ASC"; |
Deze query resulteert in een lijst die redelijk lijkt op wat ik nodig heb, maar is nog niet goed genoeg aangezien het veel te veel data resulteert.
Wat nog niet goed is aan de query:
- per product worden álle beschikbare modellen weergegeven, terwijl dat er maximaal 5 mogen zijn
- per model worden álle winkels die deze op voorraad hebben weergegeven, terwijl ik alléén de winkel met de meeste voorraad wil zien.
Helaas is het me nog niet gelukt om deze twee mankementen in orde te krijgen, ik heb geen flauw idee hoe ik dat voor elkaar kan krijgen. Ik heb al hier en daar een LIMIT erachter geprobeerd te zetten maar dat geeft niet het gewenste effect...
Excuus voor deze belachelijk grote post, ik hoop dat iemand het voorbeeld kan begrijpen, anders probeer ik nog meer tekst en uitleg te geven!