2011-03-08 18 views
0

これを行うには最善の方法をシリアル化していますか?1つのアイテムに複数の値を格納するには

たとえば、音楽のデータベースがあり、ジャンル別に音楽を分類したいとします。特定のアルバムの複数のジャンルを許可する場合は、それらを配列として保存してシリアル化しますか?このような?

$array = serialize(array(1,2,3)); //数字は、私がここで別のポストからそれを取得するジャンル

のIDです。私はそれらを直列化できないことを知っています。私が得られないことは、データの一部またはすべてを取得するSQL文を書く方法です。特定のアルバムのすべてのジャンルを取得する場合、私のSQL文はどのように見えますか?

それはあなたが実行したい照会していますが、独自のテーブルにジャンルを置くべきかに依存し
+0

また、私は長いジャンルのジャンルを持つため、別の方法でデータを保存する必要があります。 – sehummel

+0

そして、シリアル化された配列からこれらの値の1つだけを取得したいのですが? – sehummel

+0

非常に関連する質問:http://stackoverflow.com/questions/2145255/storing-multiple-values-in-a-single-cell-in-mysql – gparis

答えて

2

あなたを実際にはは、データを正規化し、ジャンルとアルバムを異なるテーブルのジャンル関連に保存したいと考えています。

すなわち: - >ジャンル検索アルバムIDとジャンル

  1. アルバムアルバムデータ
  2. ジャンルジャンルデータ
  3. アルバム:あなたは理想的な3つのテーブルを持っていると思います各団体を構成するID

必要に応じてジャンルを簡単に追加/削除できるようになり、文字列操作を実行するのではなくテーブルに参加してルックアップを実行できるようになります。

+0

これを行うアルバムに複数のジャンルを保存できますか? – sehummel

+0

@ shummel7845はい。そのアルバムのアルバム - >ジャンルルックアップテーブルに2つのエントリがあるだけです。 –

+0

入手しました。ありがとうmiddaparka。 – sehummel

4

Genre 
id | name 

やジャンルでアルバムを関連付けるテーブル作成:

Album_Genre 
album_id | genre_id 
+0

+1そして、ジャンル別にアルバムをプルするSQLはSELECT * from genre inner join Album_Genre on genre_id = id WHERE name = 'reagge'' –

2

association tableを使用してデータベースを正規化する必要があります。

first normal formのWikipediaの記事は、複数の電話番号を持つ人が関わる良い例です。

+0

ああ、そうだ.....いい記事。 – sehummel

1

しないでください。多くの関係に多くの場合

、あなたは第三のテーブルが必要になります。

songs: id, name, ... 

genres: id, name, ... 

relation_songs_genres: song_id, genre_id 
2

あなたは多対多の関係(ジャンルへの音楽)をモデル化しようとしています。したがって、別のテーブル(Genre)を作成してから、Music and GenreテーブルのIDを持つ相互参照テーブル(Music_Genre)を作成する必要があります。

関連する問題