2009-08-23 16 views
1

私はcontent_idとtype colomnを保持するインデックステーブルを持っています。 (テーブル:contentvideo、contentaudio)のcontent_idに基づいて適切なデータを取得することは可能でしょうか?MySQL複数選択

+0

あなたはあなたが持っているテーブルと持っているフィールドを正確に分かりますか? –

+1

'polymorphic-associations'タグを追加しました。なぜならそうしているからです。このデータベース設計に関連する他の質問を見るには、タグに従ってください。 –

答えて

0
+1

私はあなたが与えたリンク上のMysSQLで読んだことがあります。概念は明確で、例は貧弱ですが、私はいくつかの検索を行い、ケースジェスチャーに基づいて必要なものだけを見つけました。ありがとう! 同じことにつまずく可能性がある他の人々のために。ここに私が必要としたリンクがあります(CASEスイッチに基づくSELECT) http://forums.mysql.com/read.php?10,245909,245990#msg-245990 –

+0

まあ、問題ありません! ;) –

1

私はあなたが単一のSELECT文を介してコンテンツを取得したいそれを取りますか?コンテンツテーブルのレイアウトはまったく同じである場合は、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 */ 

content_idあなたcontentテーブルのすべてにわたって一意でない場合、あなたは同じのために(異なるタイプの)複数のレコードを取得することcontent_idindextableキーに基づいて特定のレコードを選択する場合は、ユニオンの各部分に追加する必要があります。

あなたcontentテーブルが異なるレイアウトを持っている場合は、代わりにOUTER JOINを使用し、一つのレコード(欠けているものは、NULL値として返されます)の一部として、様々なコンテンツタイプを取得できます。

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 = ? 

。なお、 content_typeは、この場合はまったく関与していません(また、UNION selectのどちらにも必要ありません)。