我有一个存储在1个表格中的电视节目列表。另一张桌子展示了流派(动作,浪漫,喜剧)。
大多数节目通常都有超过1种类型,所以只有一个tv_genre列并将类型ID放在那里就没有选择。
我可以创建一个存储电视节目ID +流派id的查找表,我可以为每个与节目相关的流派插入1行。
当我想要输出模糊的东西时,我想输出索引上的节目列表,以及与电视节目相关的流派名称。如何将3个表组合成1个有效的查询(而不是为索引上的每个项运行单独的查询,获取其类型)。
就本文而言,表格如下
TV Show Table
- tv_id
- tv_name
Genre Table
- genre_id
- genre_name
谢谢!
答案 0 :(得分: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
答案 1 :(得分: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
您的索引页面效率不高;它不能是:你拉整个桌子(好吧,所有三个桌子)。如果它成为一个问题,请查看缓存。
答案 2 :(得分: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
像这样的东西
答案 3 :(得分: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