2011-08-29 45 views
1

當某人執行復選框搜索時,是否可以在一列中包含多個變量?比方說,複選框是這樣的:一列中有多個變量?

音樂跳舞: 1.Oldies 2.Reggae 3.pop 4.house

而且我們說,有通過「活動」的名稱是一個表,其中一列是音樂。 列可能包含比方說1,3,4,如果有人選擇複選框1,3或4,它將被搜索它會返回此行嗎?

謝謝:)

+3

這可以工作,但是一個壞主意:你應該規範化這些數據。創建一個額外的表格musicForEvent,其中包含一個EventID和一個音樂列,如果事件有三個音樂,現在添加三行。 – Konerak

+1

標準化不是這裏的解決方案。你想要的是比關係模型更具表現力的東西,所以我不妨建議使用NoSQL。 – Halcyon

+0

@Frits破壞了NoSQL,noice! –

回答

4

你所描述的是一種多對多的關係。這意味着可以有很多事件,每個事件可以包含多種風格的音樂。另一方面,一種音樂風格可以在許多事件中表現出來。

通常,您可以使用助手錶和兩個不同的表來表示'事件'和'音樂'的這種關係:假設'事件'具有主鍵ID,'音樂'也是如此,但是沒有「音樂」或「事件」中的列相互引用。相反,要在它們之間建立鏈接,您需要創建第三個表'Event_Music',其中包含'event_id'和'music_id'列。考慮下面這個例子:

Table Event 

id | name 
1 | Event A 
2 | Event B 
3 | Event C 


Table Music 

id | style 
1 | oldies 
2 | reggae 
3 | pop 
4 | house 


Table Event_Music 

event_id | music_id 
    1  |  1 
    1  |  3 
    3  |  4 

這告訴你,有將是事件A與老歌和流行,有將是事件C只有音樂房子。

+0

太棒了,這很容易理解,但是當我返回表時 - 每個事件會有多行,因爲這個? – pufAmuf

+0

是的,如果某個事件具有多種音樂風格,則Event_Music中有多行。假設您的用戶選中了1和3,這是一個以「oldies」和「pop」爲特徵的事件。然後要獲取相應的事件,您將查詢Event_Music中具有相同event_id的條目,並且同時存在具有此音樂ID = 1和音樂ID = 3的event_id的條目。 – emboss

+0

嗯,這看起來並不理想,因爲我只想返回一行 - 對於每種音樂風格的專欄怎麼樣? – pufAmuf

1

您需要查看許多數據庫結構。做一些研究,設置一些表格,並給它一個鏡頭。這是數據庫的基本形式之一。

1

將音樂類型放入單獨的表格中,並創建一個列和一個從事件指向音樂類型表的外鍵。然後,您將音樂表的PK存儲到事件表中。

2

我認爲你在尋找一個爲MySQL SET列類型

+0

如果您打算倒譜,請留下評論 – Halcyon

+0

+1作爲替代方案,如果您不希望遵循傳統的多對多關係數據庫方法。 –

+0

我沒有downvote任何人:/ – pufAmuf

2

如果我理解正確的話,不,你不能在同一領域多個值(至少在一個健全的方式)。

您可以在單獨的表格中這樣做,我們可以將其稱爲[events_genres],它的[Events]表主鍵和[genres]表主鍵上的另一個外鍵具有foreign key

例如:

[events_genres] 
events_id genre_id 
1   1 
1   2 
1   3 
2   3 

events_id是事件的表的ID [事件]和genre_id是體裁的id(老歌,雷鬼,PHP ...)在[流派]表。

+0

技術上你應該在這個設置中有一個橋/連接表(例如'events_to_genres')。 「流派」表只能包含基礎流派記錄。 –

+0

@Jason McCreary是的,當我編輯我的帖子的時候,我認爲你已經認識了我:)我認爲現在更清楚了。 – AlexV

+0

這個解決方案不會爲每個事件返回多於一行嗎? – pufAmuf