Jump to content

Consulta desde SQL o Php My admin


Recommended Posts

Buenos días,

 

Tengo un montón de artículos (como 60.000) en una tienda, que va muy relantizada por este motivo. Cómo podría borrar de una sola consulta todos los artículos que tienen stock 0? Los que están en stock cero, la gran mayoría ya están obsoletos (se trata de tienda normal de pc's, impresoras...)

Link to comment
Share on other sites

Hola, alguna idea? Lo digo porque eliminarlo a través dl Back Office tarda horas solo para eliminar 500 o 600, es interminable...

 

De todos modos, es mejor hacerlo a través del Back office aunque tarde tanto? Quizás está borrando mejor los datos (incluidas relaciones y vinculaciones) que si se hiciera con una simple consulta mysql?

Link to comment
Share on other sites

Tienes que tener en cuenta que hacerlo con un SQL delete puede ser complicado y hasta contraproducente.. pueden quedar cosas colgadas

 

Este es el método delete de Product que es usado en un 1.6.09, como ves hay muchas dependencias que borra. Y además llama al delete normal de prestashop  que se ocupa de borrar entradas de multitienda, lenguaje..etc

public function delete()
	{
		/*
		 * @since 1.5.0
		 * It is NOT possible to delete a product if there are currently:
		 * - physical stock for this product
		 * - supply order(s) for this product
		 */
		if (Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT') && $this->advanced_stock_management)
		{
			$stock_manager = StockManagerFactory::getManager();
			$physical_quantity = $stock_manager->getProductPhysicalQuantities($this->id, 0);
			$real_quantity = $stock_manager->getProductRealQuantities($this->id, 0);
			if ($physical_quantity > 0)
				return false;
			if ($real_quantity > $physical_quantity)
				return false;
		}
		$result = parent::delete();

		// Removes the product from StockAvailable, for the current shop
		StockAvailable::removeProductFromStockAvailable($this->id);
		$result &= ($this->deleteProductAttributes() && $this->deleteImages() && $this->deleteSceneProducts());
		// If there are still entries in product_shop, don't remove completly the product
		if ($this->hasMultishopEntries())
			return true;
			
		Hook::exec('actionProductDelete', array('product' => $this));
		if (!$result ||
			!GroupReduction::deleteProductReduction($this->id) ||
			!$this->deleteCategories(true) ||
			!$this->deleteProductFeatures() ||
			!$this->deleteTags() ||
			!$this->deleteCartProducts() ||
			!$this->deleteAttributesImpacts() ||
			!$this->deleteAttachments(false) ||
			!$this->deleteCustomization() ||
			!SpecificPrice::deleteByProductId((int)$this->id) ||
			!$this->deletePack() ||
			!$this->deleteProductSale() ||
			!$this->deleteSearchIndexes() ||
			!$this->deleteAccessories() ||
			!$this->deleteFromAccessories() ||
			!$this->deleteFromSupplier() ||
			!$this->deleteDownload() ||
			!$this->deleteFromCartRules())
		return false;

		return true;
	}

En definitiva mas que por sql lo mejor es crearse un script php que saque todos  los ids de productos sin stock y itere para borrar los productos via la API de prestashop (es decir $prod=new Product($id_prod); $prod->delete())

Link to comment
Share on other sites

Ok Enrique. Entonces, aunque tarde días en borrar todos los productos de la web, crees que es mejor hacerlo manualmente dentro del Back office?

 

Me refiero a que si lo hago desde el back office, si se borrarán seguro correctamente todas las dependencias?

Link to comment
Share on other sites

Ok Enrique. Entonces, aunque tarde días en borrar todos los productos de la web, crees que es mejor hacerlo manualmente dentro del Back office?

 

Me refiero a que si lo hago desde el back office, si se borrarán seguro correctamente todas las dependencias?

 

Desde luego que si lo haces por el backoffice pasa por donde tiene que pasar y va a morir al delete(), por lo que no hay forma mas segura de borrar un producto

 

 

Si el número de productos es demencial hacer el script es una buena idea. si te sirve de base puedes mirar este script para cambiar los passwords (es para 1.5.6 para 1.6 no lo he probado)

http://www.prestashop.com/forums/topic/187719-contrasena-back-office/?p=928646

 

Nota: eso sí, copia de seguridad de toda la base de datos y si es posible hacerlo previamente en un entorno de pruebas. Esta claro que esto del script es para usuarios avanzados, si no sabes lo que estas haciendo mejor no tocar nada.

 

Saludos

Edited by Enrique Gómez (see edit history)
Link to comment
Share on other sites

  • nadie locked this topic
Guest
This topic is now closed to further replies.
×
×
  • Create New...