Hallo iedereen,

laatst vroeg ik hier wat de beste manier is om attractie gegevens in een database op te slaan. Het antwoord heeft me goed op weg geholpen, al zit ik nu met een nieuw probleem. In mijn php file probeer ik alle data uit te lezen, maar mijn INNER JOIN kennis blijkt nog niet zo ver te reiken.

Hieronder een korte uitleg van m'n drie tabellen:

Tabel "attractions": id van de attractie en naam van de attractie
Tabel "attraction_property_types": eigenschappen van de attractie, bvb "bouwjaar", "capaciteit", "fabrikant", ...
Tabel "attractions_properties" die een link legt tussen de twee voorgaande tabellen

attractions
-----------
id (= primaire sleutel van de attractie)
name (= naam van de attractie)

attraction_property_types
-------------------------
id (primaire sleutel van de eigenschap)
value (= naam van de eigenschap, bvb "bouwjaar", "capaciteit", "fabrikant", ...)

attraction_properties
---------------------
id
attraction_id (= foreign key, verwijst naar het id van de attractie)
property_id (= foreign key, verwijst naar het id van de property)
value (= waarde van de eigenschap, bvb "1984", "1000 personen per uur", "Vekoma", ...)

En hier vind je de link zodat je begrijpt welk doel ik voor ogen heb: http://beta.bellewaerdefun.be/het-park/attracties/boomerang

Ik bouw mijn SQL als volgt op:

$sql = "SELECT attractions.name,
attractions.intro,
attractions.extra,
attraction_property_types.type,
attraction_properties.value
FROM attractions
LEFT JOIN attraction_properties ON attractions.id = attraction_properties.attraction_id
LEFT JOIN attraction_property_types ON attraction_properties.property_id = attraction_property_types.id
WHERE attractions.id = '" . $id . "
'";

Vreemd genoeg krijg ik in mijn resultatenset maar één record te zien, terwijl ik al meerdere regels in de tabel "attraction_properties" gestopt heb. Wordt mijn inner join wel goed opgebouwd? Of wat zie ik nog over het hoofd? Alvast bedankt voor de hulp!
Je selecteert 1 record uit je attraction (kijk maar naar je WHERE)
Dan zoek je daarbij de properties (je eerste LEFT JOIN)
en daarbij de property_types (je tweede LEFT JOIN)

Door die WHERE krijg je dus 1 record.
Aha, op die manier! Kan ik dan via één SQL ook de gegevens selecteren die bij die ene attractie horen? Of is het beter om een nieuwe SQL aan te maken?
Het is gebruikelijk om 1 query te maken voor een attractie en 1 query voor de gegevens van een attractie. Dan ga ik er vanuit dat dit een 1 op veel relatie is.

Je kunt beter meerdere eenvoudige query's hebben dan 1 heel ingewikkelde query.
Bij deze ingewikkelde zou het wel eens zo kunnen zijn dat MySQL bijvoorbeeld alle records in een tabel bij langs moet en bij eenvoudige query's niet. Of wel gebruikt een query een index ja of nee.

Reageren