リレーション テーブルと外部キーの概念についてよく勉強する必要があります。次のように、タグを独自のテーブルに分割することをお勧めします。
アルバム表
album_id album_artist album_title
---------------------------------------------------
1 Nirvana In Utero
2 Noisia Split the Atom
タグ表
album_id tag
--------------------------------------------------
1 Rock
1 Grunge
1 Alternative
2 Dubstep
2 Drum & Bass
2 Experimental
次に、GROUP CONCAT を使用してそれらをカンマ区切りのリストに結合できます。
SELECT a.album_artist
,a.album_title
,GROUP_CONCAT(b.tag) AS tags
FROM Album a
JOIN Tags b
USING (album_id)
WHERE album_id = xxx
結果:
album_artist album_title tags
---------------------------------------------------
Nirvana In Utero Rock, Grunge, Alternative
Noisia Split the Atom Dubstep, Drum & Bass, Experimental
さらに、データをアーティスト テーブルに分割することもできます。このテーブルでは、album_artist 名がアーティスト テーブルのアーティスト ID に置き換えられ、タグ名が別のテーブルに分割され、タグ名が tag_ids に置き換えられます...
これはMySQLに固有のものであることに注意してくださいGROUP_CONCAT
... SQL SERVER 2005以降にも同様のものがあることは確かですが、彼らがそれを何と呼んでいるのか覚えていません。またUSING (col_name)
、MySQL 固有のものであり ON a.album_id = b.album_id
、結合する列が同じ名前の場合にのみ使用できる ON 句を記述する簡単な方法です。より短く、複雑なクエリを読みやすくするため、USING
私はそれを好みます。ON
https://en.wikipedia.org/wiki/Database_normalization
編集
コメントごとに、タグを独自のテーブルに分割した場合は次のようになります。値の繰り返しを示すために、さらに 2 つのエントリを追加しました。Rock、Dubstep、Experimental が複数回使用されていることに注意してください。ただし、それらのテキスト値は 1 回しか表示されません...
Album table:
album_id album_artist album_title
---------------------------------------------------
1 Nirvana In Utero
2 Noisia Split the Atom
3 Nero Welcome Reality
4 Pink Floyd The Wall
Tags table:
tag_id tag
--------------------------------------------------
1 Rock
2 Grunge
3 Alternative
4 Dubstep
5 Drum & Bass
6 Experimental
Album_Tags table:
album_id tag_id
--------------------------------------------------
1 1
1 2
1 3
2 4
2 5
2 6
3 4
4 1
4 6
クエリ:
SELECT a.album_artist
,a.album_title
GROUP CONCAT(c.tag) AS tags
FROM Album a
JOIN Tags b
USING (album_id)
JOIN Album_Tags c
USING (tag_id)
WHERE album_id = xxx
ORDER BY album_title ASC
結果:
album_artist album_title tags
---------------------------------------------------
Nirvana In Utero Rock, Grunge, Alternative
Noisia Split the Atom Dubstep, Drum & Bass, Experimental
Pink Floyd The Wall Rock, Experimental
Nero Welcome Reality Dubstep