Data uit meerdere tabellen query-en
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!
Gewijzigd op 02/05/2011 14:57:39 door Sam Clauw
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?
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.