用户表是这样的:
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求和?
答案 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.}