1

content_id と type 列を保持するインデックステーブルがあります。(例: content_id=1、type=audio、content_id=1、type=video) 適切なテーブル (テーブル: contentvideo、contentaudio) から content_id に基づいて適切なデータを取得することは可能でしょうか?

4

2 に答える 2

1

単一の選択ステートメントを介してコンテンツを取得したいと思いますか? コンテンツ テーブルのレイアウトがまったく同じである場合は、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_id。また、何らかのキーに基づいて特定のレコードを選択している場合はindextable、それをユニオンの各部分に追加する必要があることに注意してください。

contentテーブルのレイアウトが異なる場合は、代わりにOUTER JOINを使用して、さまざまなコンテンツ タイプを 1 つのレコードの一部として取得できます (見つからないものは 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の選択にも実際には必要ありません)。

于 2009-08-23T18:51:29.083 に答える
0

CASE または IF を試しましたか?

http://dev.mysql.com/doc/refman/6.0/en/case-statement.html

于 2009-08-23T18:23:30.747 に答える