Data uit meerdere tabellen query-en

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sam Clauw

Sam Clauw

02/05/2011 14:46:34
Quote Anchor link
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!
Gewijzigd op 02/05/2011 14:57:39 door Sam Clauw
 
PHP hulp

PHP hulp

22/11/2024 20:08:52
 
TJVB tvb

TJVB tvb

02/05/2011 14:57:13
Quote Anchor link
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.
 
Sam Clauw

Sam Clauw

02/05/2011 16:00:34
Quote Anchor link
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?
 
Martijn B

Martijn B

02/05/2011 21:48:21
Quote Anchor link
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.