2011-08-29 22 views
1

誰かがチェックボックス検索を行うときに複数の変数を1つの列に入れることは可能ですか?1つの列に複数の変数がありますか?

音楽に合わせて踊るために: 1.Oldies 2.Reggae 3.pop 4.house

とのテーブルは、「イベント」の名であります言わせてのは、チェックボックスは、このようにしているとしましょう列の1つは音楽です。 誰かがチェックボックス1,3または4を選択してこの行を返すと検索される1,3,4と言うように、カラムにどういうふうに入っていますか?

感謝:)

+3

これは機能する可能性がありますが、悪い考えです。これらのデータを正規化する必要があります。 1つのEventIDと1つのミュージック列を持つ余分なテーブルmusicForEventを作成し、イベントに3つの音楽がある場合は3行を追加します。 – Konerak

+1

正規化はここでの解決策ではありません。あなたが望むのは、リレーショナル・モデルよりも表現力豊かなものなので、NoSQLの使用を提案することもできます。 – Halcyon

+0

@Frits NoSQL、noice! –

答えて

4

あなたが何を記述するかは、多対多の関係です。これは、多くのイベントが存在する可能性があることを意味し、各イベントにはいくつかの音楽スタイルが適用されます。一方、多くのイベントで音楽のスタイルを表現することができます。

一般に、 'イベント'と '音楽'のヘルパーテーブルと2つの異なるテーブルを使用して、これらの種類の関係を表現できます。 'イベント'には主キーIDがあり、 '音楽' 「音楽」または「イベント」の列を参照してください。代わりに、それらの間にリンクを設定するには、 'event_id'と 'music_id'という列の3つ目のテーブル 'Event_Music'を作成します。この例を考えてみましょう:

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 

これはオールディーズでEvent Aこととポップするが起こっているとのみハウスミュージックでイベントCがあるように起こっていることを示しています。

+0

これは分かりやすいですが、テーブルを返すと、これにより各イベントごとに複数の行が表示されますか? – pufAmuf

+0

はい、イベントに複数の音楽スタイルがある場合、Event_Musicには複数の行があります。あなたのユーザーが1と3をチェックして、「古い」と「ポップ」というイベントがあるとします。次に、対応するイベントを取得するには、同じevent_idを持つEvent_Musicのエントリを照会します。このevent_idにmusic_id = 1のエントリとmusic_id = 3のエントリの両方があります。 – emboss

+0

Hmmm、それは理想的ではないようですが、1つの行だけが返されるようになります。各音楽スタイルの列はどうですか? – pufAmuf

1

あなたは多くを検討する必要があります:多くのデータベース構造。いくつかの研究を行い、いくつかのテーブルを設定し、それを撃つ。これはデータベースの基本的な形式の1つです。

1

別のテーブルに音楽の種類を入れ、イベントから音楽の種類の表を指す列と外部キーを作成します。次に、音楽テーブルのPKをイベントテーブルに保存します。

2

私は私が正しくあなたを理解していれば、いいえ、あなたは(少なくともまともな方法で)同じフィールドに複数の値を持つことはできませんあなたがMySQLのSET列タイプ

+0

従来の多対多のリレーショナルデータベースのアプローチに従わない場合は、downvoteに進む場合は、 – Halcyon

+0

+1のコメントを残してください。 –

+0

私は誰もdownvoteしませんでした:/ – pufAmuf

2

を探していると思います。

別のテーブルでこれを行うと[Events_genres]のように呼び出され、[Events]テーブルのプライマリキーにはforeign key、[genres]テーブルのプライマリキーには別の外部キーがあります。例えば

[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')が必要です。 'genres'テーブルは、基本ジャンルのレコードのみを含むべきです。 –

+0

@Jason McCrearyええ、私は私の投稿を編集している間に私を思いついたと思う:)私はそれが今よりはっきりしていると思う。 – AlexV

+0

このソリューションは、イベントごとに1つ以上の行を返しませんか? – pufAmuf

関連する問題