mysql,如何对存储为字段值的数组中的值求和?

时间:2012-08-16 23:36:39

标签: php mysql arrays

用户表是这样的:

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

我需要查询所有用户的选项字段,值是这样的数组:

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

然后,将此数组中key2的所有值加起来。

我能想到的唯一方法是将每个数组作为一行创建一个虚拟表。也许这是不可能的。那么,如何在选项字段中为所有用户的key2求和?

2 个答案:

答案 0 :(得分:1)

除了Cihan的答案(汇总每一行),或在数据库中创建一个视图(并且视图需要理解数组的序列化),那么最快的方法是“正确”存储数据而不是像这样的一个领域。

如果您想要快速和定期求和,请创建第二个表:

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。

答案 1 :(得分: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.}