2016-12-03 40 views
0

首先,我想说我没有任何代码来支持这一点。我试图将一个想法概念化。所以,提前道歉。通过连接选择/组合MySqli数据

基本破损。我有一个充满演出的数据库,每个演出可以有多个流派,比如演出A可以是一个动作,冒险,戏剧。典型的,对吧?现在,因为我的数据库设置了诸如genre_1,genre_2,genre_3等列。我知道这很糟糕,这就是我重做它的原因。

我想创建一个完整的流派的表,然后有节目信息的表,然后有一个表把这两种。因此,类型和显示表中的主键将是类型显示表中的外键。

我敢肯定这是去了解这一个一对多的关系,但让我知道如果有什么我失踪的最佳途径。

我的问题是,我不确定我会怎样,对于比如说,列出在动作或冒险类游戏的所有节目,或者列出在动作和冒险类游戏的所有节目。

我相当,那种熟悉的加入,但我的知识,我想不通我怎么会查询该。

最终,我所希望做的是能够查询我的数据库,并说:“给我每场演出有动作和冒险类游戏”,然后我的路。

我希望这是有道理的。提前感谢您的时间/答案,我真的很感激它。

回答

0

一对多101:

主表:

id (primary key, auto_increment), 
name, 
datecreated (datetimestamp), 
dateupdated (datetimestamp) 

多对一一项的

id (primary key, auto_increment), 
main_id (foreign key) 
name, 
datecreated (datetimestamp), 
dateupdated (datetimestamp) 

多对一一个乙

id (primary key, auto_increment), 
main_id (foreign key) 
name, 
datecreated (datetimestamp), 
dateupdated (datetimestamp) 

现在你可以加入尽可能多的多对一表格d因此:

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找到符合您的目标是,main_id.id行的子循环。