0

用户表是这样的:

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 求和?

4

2 回答 2

1

除了 Cihan 的回答(对每一行求和),或在数据库中创建一个视图(并且该视图需要了解数组的序列化)之外,最快的方法是“正确”存储数据,而不是存储在一个 munged 字段中像那样。

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

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。

于 2012-08-17T00:15:40.063 回答
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.}
于 2012-08-17T00:05:21.130 回答