Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

186
Vistas
Symfony3 foreach hace que el servidor local se bloquee

Tengo dos tablas en una base de datos que se vacían y reemplazan con mucha frecuencia. Cada tabla tiene más de 65.000 filas. Quiero seleccionar dos campos de la primera tabla ( LnsPriceUpdates ), luego tomar esos valores y compararlos e insertarlos en la segunda tabla ( LnsCatalog ) y quiero hacer esto para los 65 000 elementos de la base de datos.

(Nota: quiero hacer todo esto desde un host local)

Aquí está el código actual que estoy usando:

 public function testbananaAction() { $em = $this->getDoctrine()->getManager(); $query = $em ->createQuery( 'SELECT l.partnumber, l.level1Net FROM AppBundle:LnsPriceUpdates l WHERE l.level1Net IS NOT NULL' ) ->getResult(); foreach ($query as $row){ $partNo = $row['partnumber']; $part = $em->getRepository('AppBundle:Lnscatalog') ->findOneBy(['partnoid' => $partNo]); $dealerCost = $row['level1Net']; if(isset($dealerCost) && isset($part)){ $partCheck = $part->getDealerCost(); if(!isset($partCheck)){ $part->setDealerCost($dealerCost); $em->flush(); } } else { continue; } } return new Response('yay'); }

Cualquier idea para realizar esta tarea sin fallar sería útil.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

¿Puedes lograr con una sola actualización Sql algo como:

 update Lnscatalog c set c.dealerCost = (SELECT l.level1Net FROM AppBundle:LnsPriceUpdates l WHERE l.level1Net IS NOT NULL and l.partnumber=c.partnoid) where c.dealerCost is null and exists (SELECT l.level1Net FROM AppBundle:LnsPriceUpdates l WHERE l.level1Net IS NOT NULL and l.partnumber=c.partnoid)

Puede acelerar esta consulta agregando algún índice en la tabla anterior, como ejemplo:

 ALTER TABLE LnsPriceUpdates ADD INDEX LnsPriceUpdates_IDX_1 (level1Net, partnumber) ; ALTER TABLE LnsPriceUpdates ADD INDEX LnsPriceUpdates_IDX_2 (partnumber) ; ALTER TABLE Lnscatalog ADD INDEX Lnscatalog_IDX_2 (dealerCost) ;

Se pueden encontrar algunas referencias sobre la optimización de consultas SQL aquí , aquí y aquí

Espero que esto ayude

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda