173

MySQL に 2 つのテーブルがあります。表 Person には次の列があります。

ID 名前 果物

fruits列には、null または ('apple'、'orange'、'banana')、('strawberry') などの文字列の配列を保持できます。2 番目のテーブルは Table Fruit で、次の 3 つの列があります。

フルーツ名 価格
りんご 2
オレンジ オレンジ 3
----------- -------- ------

fruitsでは、2 番目のテーブルの列から値を取得する文字列の配列を保持できるように、最初のテーブルの列をどのように設計すればよいfruit_nameでしょうか? MySQL には配列データ型がないので、どうすればよいですか?

4

7 に答える 7

212

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テーブルには、人物が関連付けられている果物ごとに 1 つの行が含まれており、 と テーブルが効果的にリンクさpersonfruitsています。IE

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
于 2013-06-28T18:55:08.810 に答える
-8

そのように group_Concat を使用して配列を保存できます

 INSERT into Table1 (fruits)  (SELECT GROUP_CONCAT(fruit_name) from table2)
 WHERE ..... //your clause here

HEREフィドルの例

于 2013-06-28T18:53:34.697 に答える