Ik heb een vraagstuk met betrekking tot het optimaliseren van een MySQL query aan de voorkant van een webwinkel. Aan de achterkant werkt alles soepeltjes.
Eerst even mijn database structuur

Uitleg structuur:
In het begin was de database structuur simpel:
Op een gegeven moment kwam ik met het idee dat het ook wel handig zou zijn als je wat makkelijker de desbetreffende afbeeldingen bij een product kan beheren. Dit heeft helaas bij mij als resultaat gehad dat ik naast de hoofd query om alle producten op te halen ook nog eens losse queries had per product om de juiste afbeeldingen op te halen.
De ingewikkelde uitleg:
Kortom, ik wil het bundelen in 1 grote query waarbij je ook nog eens vanuit de product variaties kijkt. Er hoeft maar 1 afbeelding opgehaald te worden. Even de snelle dirty query uitgeschreven:
SELECT product_variation.*, product.title, product_image.file
FROM product_variation
LEFT JOIN product
LEFT JOIN product_image
LEFT JOIN product_attribute_combination
GROUP BY product_variation.id
Het probleem hiermee is dat je alle afbeeldingen pakt en dat willen we niet. We willen namelijk alleen de afbeeldingen met de attributen uit de product variaties. Dus aan de afbeeldingen van dat producten zitten voorwaarden gekoppeld zoals: afbeelding alleen weergeven bij de kleur blauw.
En hier loop ik compleet vast. Het enige wat ik kan bedenken is dat ik maar 1 afbeelding wil ophalen met bepaalde voorwaarden. Dus de LEFT JOIN op product_image moet een soort eigen SQL query krijgen met voorwaarden uit de tabel product_attribute_combination.
Ik heb al geprobeerd om een oplossing te vinden door te zoeken op"left joins met multiple conditions".
Kan iemand mij de goede richting op wijze?
Eerst even mijn database structuur

Uitleg structuur:
In het begin was de database structuur simpel:
- producten hebben varianten zoals verschillende kleuren of maten. Het kan ook een combinatie zijn van verschillende varianten zoals de maat M en de kleur paars.
- producten hebben afbeeldingen
- De varianten opties zoals kleur of maten worden in een apart tabel beheerd. De reden hierachter is om herhaling te voorkomen. Je wilt namelijk niet de Maat M bij alle 1001 producten opnieuw invoeren. Tevens heb je nu alle vrijheid om verschillende product combinaties te maken ongeacht of je nou in de kleding of food sector zit
Op een gegeven moment kwam ik met het idee dat het ook wel handig zou zijn als je wat makkelijker de desbetreffende afbeeldingen bij een product kan beheren. Dit heeft helaas bij mij als resultaat gehad dat ik naast de hoofd query om alle producten op te halen ook nog eens losse queries had per product om de juiste afbeeldingen op te halen.
De ingewikkelde uitleg:
- Producten hebben afbeeldingen
- Producten kunnen meerdere variaties hebben
- Sommige afbeeldingen wil je alleen weergeven bij een bepaalde variatie of bij alle afbeeldingen
- Via deze database structuur is dit mogelijk, want je kan zeggen: deze afbeelding alleen weergeven bij de kleur: blauw en/of Maat: M. Daarnaast kan je ook zeggen: alleen weergeven bij deze product variatie. De koppel tabellen: product_variation_image en product_image_attribute zijn hiervoor.
Kortom, ik wil het bundelen in 1 grote query waarbij je ook nog eens vanuit de product variaties kijkt. Er hoeft maar 1 afbeelding opgehaald te worden. Even de snelle dirty query uitgeschreven:
SELECT product_variation.*, product.title, product_image.file
FROM product_variation
LEFT JOIN product
LEFT JOIN product_image
LEFT JOIN product_attribute_combination
GROUP BY product_variation.id
Het probleem hiermee is dat je alle afbeeldingen pakt en dat willen we niet. We willen namelijk alleen de afbeeldingen met de attributen uit de product variaties. Dus aan de afbeeldingen van dat producten zitten voorwaarden gekoppeld zoals: afbeelding alleen weergeven bij de kleur blauw.
En hier loop ik compleet vast. Het enige wat ik kan bedenken is dat ik maar 1 afbeelding wil ophalen met bepaalde voorwaarden. Dus de LEFT JOIN op product_image moet een soort eigen SQL query krijgen met voorwaarden uit de tabel product_attribute_combination.
Ik heb al geprobeerd om een oplossing te vinden door te zoeken op"left joins met multiple conditions".
Kan iemand mij de goede richting op wijze?
Webontwikkelaar - Kitesurfer | Gamer