2013-12-18 50 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 

當您從數據庫中獲取數據時,您需要將字符串拆分爲:或所選的其他字符。

相關問題