2016-12-03 43 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行的子循環。