1. ホーム
  2. mysql

[解決済み] MySQLで配列を保存するには?

2022-03-03 13:57:50

質問

MySQLに2つのテーブルがあります。テーブルPersonには、以下のカラムがあります。

<テーブル イド 名前 果物

fruits カラムには、null や ('apple', 'orange', 'banana'), ('strawberry') などの文字列の配列を格納することができます。2 番目のテーブルはテーブル Fruit で、以下の 3 つのカラムを持つ。

<テーブル フルーツ名 色 価格 リンゴ 赤 2 オレンジ オレンジ 3 ----------- -------- ------

では、どのようにデザインすればいいのでしょうか。 fruits カラムの値を取る文字列の配列を保持できるようにします。 fruit_name カラムを使用できますか?MySQL には配列データ型がないので、どのようにすればよいのでしょうか?

どのように解決するのですか?

正しい方法は、複数のテーブルを使用し JOIN をクエリで使用します。

例えば

CREATE TABLE person (
`id` INT NOT NULL PRIMARY KEY,
`name` VARCHAR(50)
);

CREATE TABLE fruits (
`fruit_name` VARCHAR(20) NOT NULL PRIMARY KEY,
`color` VARCHAR(20),
`price` INT
);

CREATE TABLE person_fruit (
`person_id` INT NOT NULL,
`fruit_name` VARCHAR(20) NOT NULL,
PRIMARY KEY(`person_id`, `fruit_name`)
);

person_fruit テーブルには、各人が関連する果物ごとに一行が含まれ、効果的に personfruits テーブルを一緒にすることで、I.E.

1 | "banana"
1 | "apple"
1 | "orange"
2 | "straberry"
2 | "banana"
2 | "apple"

ある人物とその果物のすべてを取得したい場合は、次のようにします。

SELECT p.*, f.*
FROM person p
INNER JOIN person_fruit pf
ON pf.person_id = p.id
INNER JOIN fruits f
ON f.fruit_name = pf.fruit_name