1

1 つのテーブルに保存されているテレビ番組のリストがあります。別のテーブルには、ショーのジャンル (アクション、ロマンス、コメディ) が格納されます。

通常、ほとんどの番組には複数のジャンルがあるため、tv_genre 列を 1 つにしてそこにジャンル ID を入れるという選択肢はありません。

テレビ番組 ID + ジャンル ID を格納するルックアップ テーブルを作成し、番組に関連付けられたジャンルごとに 1 行を挿入できます。

私にとって物事があいまいになるのは、インデックス上の番組のリストと、テレビ番組に関連付けられたジャンル名を出力したいときです。3 つのテーブルを 1 つの効率的なクエリに結び付けるにはどうすればよいでしょうか (インデックスの項目ごとに個別のクエリを実行してそのジャンルを取得するのではなく)。

この投稿の目的のために、表は次のとおりです。

TV Show Table
- tv_id
- tv_name

Genre Table
- genre_id
- genre_name

ありがとう!

4

4 に答える 4

6

http://dev.mysql.com/doc/refman/5.0/en/join.html

JOIN は SQL の心臓部です。あなたは次のようなもので終わるでしょう

select tv_name, genre_name
from tvshows
   left join shows_genres on tvshows.tv_id = shows_genres.tv_id
   left join genres on genres.genre_id = shows_genres.genre_id
于 2009-07-24T01:11:56.123 に答える
4

MySQL の GROUP_CONCAT 関数を使用できます。

SELECT
    t.tv_name, GROUP_CONCAT(g.genre_name)
  FROM
    tv_shows t
    LEFT JOIN show_genres sg ON (t.tv_id = sg.tv_id)
    LEFT JOIN genres g ON (sg.genre_id = g.genre_id)
  WHERE
    /* whatever */
  GROUP BY t.tv_name

インデックス ページは特に効率的ではありません。テーブル全体 (つまり、3 つのテーブルすべて) をプルしているわけではありません。問題が発生した場合は、キャッシングを検討してください。

于 2009-07-24T01:13:37.370 に答える
0

Show-Genre テーブル - rv_id int - Genre_id int

 select tv_show.name, genre.genre_name from tv_show,genre, show_genre where 
show_genre.tv_id = tv_show.tv_id and genre.genre_id=show_genre.genre_id

このようなもの

于 2009-07-24T01:15:02.453 に答える
0

最高のSQLではないかもしれませんが、私の考えは

select tv_name, genre_name
from tv_table, genre_table, lookup_table
where
    tv_table.tv_name = "superman"
    and
    tv_table.tv_id = lookup_table.tv_id
    and
    lookup_table.genre_id = genre_table.genre_id
于 2009-07-24T01:18:01.077 に答える