2012-04-26 2 views
1

J'ai vraiment besoin d'aide avec du SQL.SQL et PHP: Trouver tous les "actifs" connectés à "présentation"

Question 1:

Il est assez facile d'obtenir tous les « actifs » qui appartiennent à une « présentation » si l'actif a un « presentationid » correspondant au sein de ce tableau.

SELECT * FROM asset WHERE presentationid = 3 

Mais comment accomplir la même chose en rejoignant? Quelle est la meilleure façon de dire:

SELECT * FROM asset WHERE ... actif est relié à la présentation via « presentationasset »:

TABLE asset 
id 
name 

TABLE presentation 
id 
name 

TABLE presenationasset 
id 
presentationid 
assetid 

J'espère que cela est logique. Je veux répertorier tous les actifs réels et leurs colonnes, pas la table d'association. :)

Question 2: (pas aussi important)

J'ai ma configuration de l'application de telle sorte que "présentation" est une classe et "actif" est une classe ...

question 1 à l'esprit, comment puis-je renvoyer chacun des actifs associés en tant qu'objets «actifs»? Ou est-ce important?

+0

Sous-sûr sont cool sélectionne. – Jeremy

+0

Si elles sont trop cool, cela vous dérangerait-il de poster un exemple en utilisant mes tableaux ci-dessus? – dcolumbus

+0

En ce qui concerne Q2: Il n'y a aucun moyen de simplement convertir un enregistrement de base de données à un objet ... C'est là que les choses amusantes sont;). Utilisez un ORM (http://stackoverflow.com/questions/108699/good-php-orm-library) ou vous devrez écrire vous-même la couche de traduction. – NotMe

Répondre

2

Q1:

SELECT a.id, a.name 
FROM asset a 
JOIN presentationasset pa ON pa.assetid = a.id AND pa.presentationid = 3 
JOIN presentation p ON p.id = pa.presentationid 
+0

Merci beaucoup, hkf! Cela semble fonctionner très bien! Puis-je également vous poser des questions sur la question 2? – dcolumbus

+0

Essayez le commentaire @ ChrisLively – hkf

1

assez juste :)

Select * from asset where id in 
(select assetid from presentationasset where id in 
(select id from presentation where name = "whateva")) 

ou

Select * from asset where id in 
(select assetid from presentationasset where presentationid = 3) 
+0

Wow, honnêtement, je n'ai jamais utilisé sous-requêtes avant. C'est bien! – dcolumbus

+0

@dcolumbus Un avertissement, surtout en MySQL, ils peuvent être extrêmement inefficaces! Assurez-vous de vérifier votre plan d'explication. – Jeremy

Questions connexes