2012-08-16 35 views
0

用戶表是這樣的:mysql,如何將數組中的值存儲爲字段值?

user_id | key  | value 
1   option  $array 
2   other  abc 
2   option  $array 

我需要查詢所有用戶的選項字段,該值是一個這樣的數組:

$array=array('item_id'=>123, 'key1'=>'abc', 'key2'=>'1', 'key3'=>'5',) 

然後,總結在這個鍵2的所有值陣列。

我能想到的唯一方法就是將每個陣列的虛擬表作爲一行。也許這是不可能的。那麼,如何在選項字段中爲所有用戶的key2創建總和?

+0

它是否需要在查詢本身,或者如果在查詢之外使用某些邏輯,它是否沒有問題? – 2012-08-16 23:47:31

+0

這並不重要,我只需要key2的總值,當用戶保存一些新的信息時,我需要重複執行SUM。 – Jenny 2012-08-16 23:53:39

+0

你能夠從數據庫中發佈一小段數據嗎? – Diego 2012-08-16 23:58:57

回答

0
$query = mysql_query("SELECT * FROM table WHERE key = 'option'"); 

while($row = mysql_fetch_array($query)){  
    $array_sum_values[] = $row['value']['key2']; //We are creating a new array. } 

$result = array_sum($array_sum_values); 

如果我明白你的確切解決方案。

還或者,

$query = mysql_query("SELECT * FROM table WHERE key = 'option'"); 
$array_sum = 0; 
while($row = mysql_fetch_array($query)){  
    $array_sum += $row['value']['key2']; //We are creating a new array.} 
+0

從$ array_sum_values中刪除[]?給總數? – Robbie 2012-08-17 00:08:53

+0

沒有。我們創建了一個新的數組$ array_sum_values。當我們創建我們的數組。我們將數組中的每個值與array_sum相加 – 2012-08-17 00:12:20

+0

啊 - 錯過了最後一行。是的 - 你的回答是對的,但爲什麼不簡單地總結第一步,並跳過第二個數組?清潔並節省內存/時間。 – Robbie 2012-08-17 00:16:52

1

除了吉汗的答案(彙總各行),或在數據庫中創建一個視圖(和視圖需要了解數組的序列化),然後以最快的方式將應該將數據「正確地」存儲起來,而不是像這樣一個冗長的領域。

如果你想快速和定期總結,創建第二個表:

user_id | key  | array_key | value 
1   option  item_id  123 
1   option  key1   abc 
1   option  key2   2 
2   other  NULL   123 
2   option  item_id  456 

你可以離開array_key空(或NULL),如果它不是一個數組。

需要一點反思和重構一些代碼,但如果你總結了很多,它會更乾淨,更容易調試,並且最終更快。創建新條目時需要更多行更新。

如果您需要單行,則可以使用GROUP BY和GROUP_CONCAT。

+0

我選擇將數據保存爲用戶表中的字段的原因是因爲usertable是原生wordpress表,緩存和其他相關作業將由wordpress自己處理。如果我創建一個新表格,我會自己完成所有的工作。也許我需要重新思考。 – Jenny 2012-08-17 00:19:42

+0

這一切都很好。首先讓它開始工作,然後在需要時從那裏改進。 – Robbie 2012-08-17 00:36:45

相關問題