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 のすべての値を合計します。

私が考えることができる唯一の方法は、各配列を 1 つの行として仮想テーブルを作成することです。おそらくそれは不可能です。次に、オプションフィールドですべてのユーザーの key2 の合計を作成するにはどうすればよいですか?

4

2 に答える 2

1

Cihanの答え(各行を合計する)、またはデータベースにビューを作成する(そしてビューは配列のシリアル化を理解する必要があります)とは別に、最も速い方法は、データを「適切に」保存し、変更されたフィールドに保存することではありませんそのように。

高速で定期的な合計が必要な場合は、2 番目のテーブルを作成します。

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 に答える