首先介绍,如果有更好的方法:我有一个带有 *product_id* 和stock的产品表,其中 stock 可以大到 5000 或 10000,我需要创建一个列表(在另一个表中),我有一个每个项目的行,也就是说,如果 *propduct_id* 有1000 个库存,我将有 1000 行带有此 *product_id* 的行,此外,此列表需要是随机的。
我选择了一个 PHP (symfony2) 解决方案,因为我发现了如何根据库存获取随机单个 product_id 甚至如何随机订购产品列表,但我没有找到如何将这些行与库存“相乘”。
现在,主要问题:所以,在 PHP 中,获取 product_id 列表,“乘以”股票并随机播放,问题来了,当我想保存时,问题就来了:
- 如果我
$em->flush
每使用 100 条或更多记录,我会在一段时间后出现内存溢出 - 如果我
$em->flush
在每条记录中使用它需要很长时间才能保存
这是我要保存的代码,也许您可以改进:
foreach ($huge_random_list as $indice => $id_product)
{
$preasignacion = new ListaPreasignacion();
$preasignacion->setProductId($id_product);
$preasignacion->setOrden($indice+1);
$em->persist($preasignacion);
if ($indice % 100 == 0) $em->flush();
}
$em->flush();
根据@Pazi 建议使用最终解决方案进行编辑:
$conn = $em->getConnection();
foreach ($huge_random_list as $indice => $id_product)
{
$conn->executeUpdate("insert into product_list(product_id, order) "
." values({$id_product}, {$indice})");
}