0

以下は、MySQL テーブルの大きな配列に対して実行する必要があります。

$v1_views = $database->get_all("SELECT image_id FROM image_views");
$v2_array = array();
foreach ($v1_views as $view)
   $v2_array[$view["image_id"]]++;

($view は、テーブルからの 2 つの変数を持つ配列でもあります)

同様のことを試しましたが、メモリがいっぱいであるというエラーが表示されました。だから私は考えています、これをこの foreach() の最後に追加するのは良い考えでしょうか?:

unset($view["image_id"]);

したがって、さらに別の大きな配列を作成することはありません...または、おそらく foreach() の後にこれだけ:

unset($view);

この後、10000行以上のUPDATEを使用して、これらの変数をすべてMySQLに挿入する必要があります

どれが最も安全な結果をもたらすでしょうか? それとももっと良いものがありますか?そして、これらすべてを安全に実行し、オーバーロードすることなく正常に完了するにはどうすればよいでしょうか?

4

1 に答える 1

1

と によって大量のスペースが使用され$v1_viewsてい$v2_arrayます。しかし$view、要素が 1 つだけの小さな配列であり、多くのスペースを占有しません。ループのたびに、変数は結果の次の行の値に置き換えられ、前の行の値は自動的に回収されます。

メモリを節約する方法は、すべてのクエリ結果の配列を作成しないことです。ほとんどのデータベース API には、一度に 1 行をフェッチするメソッドがあるため、コードの構造は次のようになります。

$result = $database->query("SELECT image_id FROM image_views");
$v2_array = array();
while ($view = $result->fetch()) {
    $v2_array[$view["image_id"]]++;
}

私はメソッド名queryを作成しましfetchた。サードパーティの API を使用している場合は、これらのメソッドの特定の名前についてドキュメントを確認してください。自家製のクラスの場合、これらのメソッドがまだ存在しない場合は追加する必要があります。

于 2013-08-30T00:40:49.237 に答える