2009-08-23 11 views
1

J'ai un indextable qui contient un content_id et un type colomn. (par exemple content_id = 1, type = audio. Content_id = 1, type = vidéo) Serait-il possible d'obtenir les bonnes données basées sur content_id à partir des bonnes tables (tables: contentvideo, contentaudio)?MySQL Multiple select

+0

pouvez-vous clarifier exactement quels tableaux vous avez et quels champs ils ont? –

+1

J'ai ajouté la balise 'polymorphic-associations', parce que c'est ce que vous faites. Suivez l'étiquette pour voir d'autres questions liées à cette conception de base de données. –

Répondre

0
+1

J'ai lu dans le MysSQL sur le lien que vous avez donné. Le concept est clair, les exemples sont pauvres, mais j'ai fait quelques recherches et j'ai trouvé exactement ce dont j'avais besoin en fonction de votre geste CASE. Merci! Pour d'autres personnes qui pourraient trébucher sur la même chose. Voici le lien dont j'avais besoin (un SELECT basé sur un switch CASE) http://forums.mysql.com/read.php?10,245909,245990#msg-245990 –

+0

Eh bien, pas de problème! ;) –

1

Je suppose que vous souhaitez récupérer le contenu via une seule instruction select? Si la mise en page de vos tables de contenu est exactement le même que vous pouvez utiliser UNION:

SELECT ca.* FROM contentaudio ca, indextable it 
WHERE ca.content_id = it.content_id 
    AND it.content_type = 'audio' 
UNION 
SELECT cv.* FROM contentvideo cv, indextable it 
WHERE cv.content_id = it.content_id 
    AND it.content_type = 'video' 
ORDER BY content_id /* or whatever */ 

Notez que si content_id n'est pas unique à travers tous vos content tables, vous pouvez obtenir plusieurs enregistrements (de différents types) pour la même content_id. Notez également que si vous sélectionnez un enregistrement particulier basé sur une clé indextable, vous devrez l'ajouter à chaque partie de l'union.

Si vos content tables ont différentes mises en page, vous pouvez utiliser un OUTER JOIN au lieu et récupérer vos différents types de contenu dans le cadre d'un enregistrement (les manquants seront retournés comme NULLs):

SELECT * FROM indextable it 
    LEFT OUTER JOIN contentaudio ca ON it.content_id = ca.content_id 
    LEFT OUTER JOIN contentvideo cv ON it.content_id = cv.content_id 
WHERE it.some_key = ? 

Notez que content_type n'est pas impliqué dans ce cas (vous n'en avez pas non plus besoin pour UNION select).