我有2张桌子,一张保持电视显示“常规”信息,另一张保持情节/季节。我需要能够显示“常规”信息表中的所有记录,但要显示“情节”表中的一些数据。
表1(电视节目)结构:
id (int) | showname (varchar) | showcategory
表2(片段)的结构:
id (int) | tvshow (int) | episode (int) | season (int) | year(int) | poster(varchar)
示例:
电视节目:
1|The Big Bang Theory|150
2|Two and a half men|150
3|The Nanny|130
剧集:
1|1|1|1|2000|file1.jpg (The big bang theory, episode 1, season 1, year 2000)
2|1|1|2|2001|file2.jpg (The big bang theory, episode 1, season 2, year 2001)
3|2|5|4|2008|file3.jpg (Two and a half men, episode 5, season 4, year 2008)
4|2|6|4|2008|file4.jpg (Two and a half men, episode 6, season 4, year 2008)
5|3|1|1|1990|file5.jpg (The Nanny, episode 1, season 1, year 1990)
现在,我需要根据类别进行查询,并获取电视节目数据以及情节表中的一些数据。理想情况是:
如果category==150
的结果将是:
The big bang theory (tvshows.showname) | 2 (count episodes.season) | 2000 (min episodes.year) | 2001 (max episodes.year) | file1.jpg (first poster found on episodes for this show)
Two and a half men (tvshows.showname) | 1 (count episodes.season) | 2008 (min episodes.year) | 2008 (max episodes.year) | file3.jpg (first poster found on episodes for this show)
如您所见,它们是按tvshows.showname排序的。
如果category==130
的结果将是:
The Nanny (tvshows.showname) | 1 (count episodes.season) | 1990 (min episodes.year) | 1990 (max episodes.year) | file5.jpg (first poster found on episodes for this show)
现在,我设法通过执行多个查询来做到这一点,但是由于我们正在谈论巨大的表(这是一个IMDB风格的网站),要花一些时间才能显示出一些结果,这就是为什么我要进行优化查询。
答案 0 :(得分:0)
您可以使用内部联接
select tvshows.showname
, count( distinct episodes.season)
, min(episodes.year)
, max(episodes.year)
, min(episodes.filename)
from tvshows
inner join episodes on tvshows.id = episodes.twshows_id
where tvshows.category=150
group by tvshows.showname
确保您在
上具有正确的综合索引表电视节目列(类别,ID)
和
表格节目专栏twshows_id