在一个MYSQL字段中存储多个值

时间:2013-12-18 16:48:09

标签: php mysql arrays

我目前正在计划一个表在MYSQL数据库中的外观。我想做类似下面的事情,其中​​plant1和plant2将成为列,然后每个植物将具有分配给它们的特征,如下所示。

是否可以在MYSQL中以这种方式显示信息?

Array ( 
    [plant1] => Array ( 
                   [image_url] => http://www.example.com/image1.png 
                   [botanical_name] => Foo 
                   [common_name] => Bar 
    ),               
    [plant2] => Array ( 
                   [image_url] => http://www.example.com/image2.png
                   [botanical_name] => Foo 
                   [common_name] => Bar 
     )               

6 个答案:

答案 0 :(得分:0)

您可以将其存储为序列化值(http://www.php.net/manual/en/function.serialize.php),但这不是一个好主意。

为此你必须创建另一个表来存储每个植物的特征,如:

**plants**
id_plant
name

**plants_ccharacteristics**
id_plant_characteristic
fk_plant
name
value

通过这种方式,您可以正确存储它。

作为一个额外的观点,您想要存储的结构看起来非常适合使用像MongoDB这样的NoSQL数据库。

答案 1 :(得分:0)

你的桌面设计存在缺陷。你应该拥有的是Plant是一行,数组中的每个项目都是植物表中的一列。

如果您需要将Plants作为另一个表中的列,则将plants表的第一列指定为唯一的自动递增键,然后将该键放在另一个表的列中。例如:

**Garden_Plants**
gp_key
gp_garden_id
gp_plant_id <-- p_id from Plants_Table

**Plants_Table**
p_id
p_botanical_name
p_common_name
p_image_url

答案 2 :(得分:0)

您将拥有一个名为plants的表,这将有一个名为plantDetails的相关表,该表具有来自相关工厂的引用ID。

这将给出1个植物,有多个参考

答案 3 :(得分:0)

这对于查询数据库似乎没有优化,但是如果您有这样做的具体原因,请告诉我们..

更优化的解决方案:

有一个名为Plants的表,其中包含字段ID,image_url,botanical_name,common_name。

将所有植物存放在该表中。 ID是该工厂的唯一标识符,可能设置为自动编号,因此无法重复

如果您需要在两个植物之间存储某种关系,请使用名为plant_relationships的表格,其中包含类似于plant_ID_1和plant_ID_2

的字段

然后,您可以直接查询完整的植物清单,或查询关系表以查找与其他植物相关的植物

答案 4 :(得分:0)

如果你想在一个mysql字段中有多个值,我建议在将信息存储到数据库之前将其放在一个字符串中。每个子字符串都需要由不在子字符串中使用的字符分隔。

$value1 = aaa
$value2 = bbb
$value3 = ccc

$valueAll = aaa:bbb:ccc

当您从数据库中获取数据时,您需要将字符串拆分为:或选择其他字符。

答案 5 :(得分:0)

好吧,我不建议这样做,但你可以将php数组插入该字段,然后在从数据库获取数据时在php中解析它。所以那个领域的内容就是这样:

$plant1 = array('plant1' => array('image_url' => 'http://www.example.com/image1.png', 'botanical_name' => 'Foo', 'common_name' => 'Bar'));
$plant2 = array('plant2' => array('image_url' => 'http://www.example.com/image2.png', 'botanical_name' => 'Foo', 'common_name' => 'Bar'));

您可以将$plant1 $plant2插入到您的mysql字段中,然后将其打印出来以获得想要的结果:

print_r(array_merge($mysql_plant1, $mysql_plant2));

函数array_merge将数组连接在一起。