用户表是这样的:
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求和?
除了 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。
$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.}