2011-06-24 68 views
0

我正在做一个数据库来组织我的电影。我有两个表格(1个用于演员的电影)。把它简单,省去了无用领域本练习mySQL JOIN列和计数不同的一张桌子上,并获得更多的价值在其他表

Table MOVIE: 
    id_movie | name_movie | star1 | star2 | star3 | runtime 

Table ACTOR: 
    id_actor | name | sex | image 

有电影的地方是STAR1例如“摩根·弗里曼”,但其他的电影“摩根·弗里曼”是在该领域STAR2。

我想从表MOVIE中的star1,star2,star3的UNION的值中计算出DISTINCT的值,然后获取表演者的演员/女演员的性别和图像。

已经尝试过各种不同类型的查询,但没有结果到目前为止:(

谁能帮我在这一个?

回答

0

它看起来像你与ACTOR使用名称字段这是一个加盟有点不可思议 - 最好你想要使用ACTOR_ID加盟,但不管怎样,下面的查询应该做你想要的东西在这些假设下:

select name, sex, image 
from actor 
where name in 
(select star1 as star from movie 
union 
select star2 as star from movie 
union 
select star3 as star from movie) 
+0

谢谢!对我来说似乎很简单! :)我使用了你的查询,但它只列出了像Morgan Freeman这样的演员M | 123.jpg ...我还想要计算他的名字出现在star1 star2和star3的总和上的次数......这是可能的队友吗? –

1

@汤姆格林的解决方案是非常接近......除了需要对“ DISTINCT“在他的查询中。

然而,不同的演员,你已经有一个演员表,查询直接从,这应该是唯一的演员,也无论他们入选了这部电影的女演员。

但是,如果你想知道不同的演员/女演员与其他人在同一MOVIE中,我实际上会将您的数据库结构调整为更灵活的结构,通过使用“桥接”或“链接”表,允许尽可能多的“星星”...提供1:许多关系

Table MOVIE: 
    id_movie | name_movie | star1 | star2 | star3 | runtime 


Table MovieActor: 
    id_movieactor | id_movie | id_actor (star) 

Table ACTOR: 
    id_actor | name | sex | image 

这里填充MovieActor表,你能...

insert into MovieActor (id_movie, id_actor) 
    select id_movie, star1 as id_actor 
     from movie 
     where star1 > 0 
    union 
    select id_movie, star2 as id_actor 
     from movie 
     where star2 > 0 
    union 
    select id_movie, star3 as id_actor 
     from movie 
     where star3 > 0 

这样,每部电影的星星数量都是无限的,但可以有至少1个,而不会浪费其他人的空间......然后,在未来,您希望通过添加可能的方式来调整查询4星电影,有多少查询将被你...调整

总之,一旦做到这一点,您可以查询一样简单

select distinct ma.id_actor, actor.* 
    from MovieActor ma join Actor on ma.id_actor = actor.id_actor 

如果你有类型的查询的其他一些例子你可能会摆脱你的数据库,我可以很容易地提供补充查询...

+0

@Tom Green和@DRapp:感谢您的及时回复!永远不要想我会如此快速地得到答案!我知道我的数据库结构并不是最好的,所以我借此机会来做你们如何告诉我,并建立第三MovieActor更灵活。我知道只允许3名演员是一个小缺陷,但这是一个我认为会简化事情的数字。 @DRapp:尝试用该查询填充新表,并插入0行:|另外:我最初的想法是显示每个演员或女演员的电影前10名......我将如何做到这一点与新的表格?无论如何...感谢一大堆! :) –

+0

@Afonso戈麦斯,我刚刚创建了3个表格结构并运行插入...它失败了......然后我记得......我需要将“id_MovieActor”设置为“自动增量”列......然后它就起作用了。至于十大电影,什么构成了排名目的的“顶级”电影...没有什么在这里量化...... – DRapp

+0

@DRapp:最有可能我忘记了“小”的细节:) –

相关问题