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

Php mysql,如何对存储为字段值的数组中的值求和?,php,mysql,arrays,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',) 我需要查询所有用户的选项字段,值是这样的数组: user_id | key

用户表如下所示:

user_id  |  key     |   value
1          option      $array
2          other        abc
2         option      $array
$array=array('item_id'=>123, 'key1'=>'abc', 'key2'=>'1', 'key3'=>'5',)
我需要查询所有用户的选项字段,值是这样的数组:

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 in选项字段的总和

$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.}
除了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。

它需要在查询本身中,还是在查询外部使用一些逻辑没有问题?不管如何做,我只需要键2的总值,当用户保存一些新信息时,我需要重复求和。您能从数据库中发布数据片段吗?当我查询选项字段时,$array是我从数据库中得到的结果。从$array\u SUM\u值中删除[]吗?要给出总数?否。我们创建了一个新数组$array\u sum\u值。当我们创建阵列时。我们用array_sumAh对数组中的每个值求和-错过了最后一行。是-你的答案是对的,但是为什么不在第一步简单求和,跳过第二个数组呢?更干净,节省内存/时间。我添加了替代Robbie。谢谢。这正是我需要的公式。我之所以选择将数据保存为用户表中的字段,是因为用户表是本机wordpress表,缓存和其他相关作业将由wordpress自己负责。如果我创建一个新表,我将自己完成所有工作。也许我需要重新考虑,一切都好。首先简单地让它开始工作,然后在需要时从那里改进。