首先,我想说我现在没有任何代码支持这一点。我试图概念化一个想法。所以,提前道歉。
基本纲要。我有一个充满节目的数据库,每个节目都可以有多种类型,例如节目A可以是动作,冒险,戏剧。典型的吧?现在,因为我的数据库设置为包含genre_1,genre_2,genre_3等列。我知道这很糟糕,这就是我重做它的原因。
我想创建一个充满流派的表,然后有一个包含show信息的表,然后有一个表来关联这两个。因此,流派和节目表中的主键将是流派节目表中的外键。
我非常确定这是解决这种一对多关系的最佳方式,但如果我有什么遗失,请告诉我。
我的问题是,我不确定我会如何列出动作或冒险类型中的所有节目,或者列出所有正在播放和冒险类型的节目。
我公平地说,有点熟悉联接,但据我所知,我无法弄清楚如何查询。
最终,我要做的是能够查询我的数据库并说“#34;给我每个有动作和冒险类型的节目"然后继续我的路。
我希望这是有道理的。提前感谢您的时间/答案,我真的很感激。
答案 0 :(得分:0)
一对多101:
主表:
id (primary key, auto_increment),
name,
datecreated (datetimestamp),
dateupdated (datetimestamp)
多对一A
id (primary key, auto_increment),
main_id (foreign key)
name,
datecreated (datetimestamp),
dateupdated (datetimestamp)
多对一B
id (primary key, auto_increment),
main_id (foreign key)
name,
datecreated (datetimestamp),
dateupdated (datetimestamp)
现在,您可以根据需要加入尽可能多的多对一表:
select
*
from
main left join
table_a on main.id = table_a.main_id left join
table_b on main.id = table_b.main_id
where
main.id = X
您将收到许多行,但每行将包含主对象的副本,但包含所有多对一行。这称为Denormalization。
或者你可能更喜欢做子循环,你运行一个查询来获取你的主要对象,然后在每个多对一的子循环中,你使用main.id
找到{{1}与您的对象匹配的行。