以下内容应该在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);
在这之后,我还必须在MySQL中插入所有这些变量,并在10000多行上使用UPDATE
哪一个结果最安全?还是有更好的东西?我如何才能安全地完成这一切,确保它在没有过载的情况下成功完成?
$v1_views
和$v2_array
正在使用大量空间。但$view
是一个只有一个元素的微小阵列,它不占用太多空间。每次通过循环时,变量都会被结果的下一行中的值替换,上一行的值会自动回收。
保存内存的方法是而不是生成所有查询结果的数组。大多数数据库API都有一种一次获取一行的方法,因此代码的结构应该类似于:
$result = $database->query("SELECT image_id FROM image_views");
$v2_array = array();
while ($view = $result->fetch()) {
$v2_array[$view["image_id"]]++;
}
我刚刚创建了方法名称query
和fetch
——如果您使用的是第三方API,请查看文档以了解这些方法的具体名称。如果它是一个自行开发的类,那么如果这些方法还不存在,您可能需要添加它们。