2013-12-18 48 views
0

我目前正在计划如何在MYSQL数据库中查找表。我想要做一些类似于下面的事情,其中​​plant1和plant2将成为专栏,然后每个工厂将具有分配给他们的特征,如下所示。将多个值存储在一个MYSQL字段中

是否可以在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 
    )    
+4

不,了解第一范式。 – Mihai

+1

在MySQL中,您希望每个字段都包含*一个*值。看看:http://en.wikipedia.org/wiki/First_normal_form –

+0

由于你们之间有共同的领域,为什么不能有3列(image_url,botanical_name,common_name)和一个识别第4列(plant1 vs plant2) 。我想它会比每次查询它时不得不为每个列解析各个值的压力更小。 – DMortensen

回答

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连接阵列一起。

+0

是的,这可能是我愿意做的事情,因为这个应用程序非常小,并且永远不会比这更复杂。感谢您展示这一点。 –

+0

马克我的回答接受,如果你满意的话:) – aksu

0

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

对于您将不得不创建另一个表来存储每个工厂的caracteristics这样的:

**plants** 
id_plant 
name 

**plants_ccharacteristics** 
id_plant_characteristic 
fk_plant 
name 
value 

这样,你就可以妥善存放。

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

0

您的餐桌设计有缺陷。你应该有什么是植物是一排,在数组中的每个项目是植物表中的列。

如果您需要将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 
0

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

这将给1个厂,有多个引用

0

这似乎并不查询数据库优化,但是如果你有一个具体的理由做这种方式,请让我们知道..

更优化的解决方案:

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

将所有植物储存在该表中。 ID是植物,可能设置与自动编号,从而不能被复制

如果您需要储存某种2种植物之间关系的唯一标识符,与字段的表称为plant_relationships这样的事情plant_ID_1和plant_ID_2

然后你可以直接查询你的植物的完整列表,或查询关系表,找到与其他植物相关的植物

0

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

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

$valueAll = aaa:bbb:ccc 

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

相关问题