Jump to content

Recommended Posts

Bonjour,

 

Suite à un import qui a "buggé", je me retrouve avec des produits en double (même nom, même ref, même description,...). Je cherche une solution rapide et massive pour supprimer ces doublons.

Cela concerne un millier de référence environ.

 

Prestashop 1.5.6

 

Merci d'avance

 

 

Share this post


Link to post
Share on other sites

Si ça peut faire avancer les choses, je souhaite supprimer les produits dont les id sont compris entre  8973 et 13962.

Share this post


Link to post
Share on other sites

Bonjour, 

 

si vous avez accès à votre base de données et que vous êtes sûr de vous vis-à-vis des id, alors voici la requête SQL à exécuter : 

 

DELETE FROM ps_product WHERE id_product > 8973

 

Cela ne nettoiera pas votre BDD mais n'affichera que les premiers produits voulus.

 

Sinon vous pouvez aussi faire un nouvel import en cochant cette fois-ci la case " supprimer les anciens produits à l'import"

Share this post


Link to post
Share on other sites

Et comment procéder pour vider les tables correspondant à ces ID ?

 

Si vous n'avez pas d'expérience dans le developpement, je vous conseille de tout simplement réimporter votre csv produit en supprimant les anciens produits lors de l'import. De cette façon, prestashop s'occupera lui même de nettoyer  les tables.

Share this post


Link to post
Share on other sites

Le problème est que cet import n'est pas un import global.

 

J'importe mes produits par paquets de 1 000 pour que mon serveur le supporte. Et j'ai déjà importé pas mal de produits avec ces techniques avant ce problème.

 

Je pense que si j'exporte tous mes produits (13 926), que je supprime mes doublons sur le csv (environ 5000), je ne pourrai pas importer mon fichier car il sera trop lourd pour mon installation.

 

Que va-t-il resté concernant ces produits en doublons sur ma bdd si j'utilise le delete à partir de l'ID 8973 ?

Share this post


Link to post
Share on other sites

Ok je vois. 

 

Le delete supprimera toutes les lignes de votre BDD où l'id_produit sera > à 8973. Si vous avez des produits que vous souhaitez conserver après l'id 13 926, il vous faudra alors écrire la requête suivante : 

 

DELETE FROM ps_product WHERE id_product > 8973 AND id_product < 13 926

 

Mais à ma connaissance, la création de produits sous prestashop est bien plus complexe, c'est pourquoi vous pouvez constater qu'il y a beaucoup de déclinaisons de tables produits. Sachant qu'en plus  certaines tables comme celle du stock et celle des catégories sont liées avec la table produit. De ce fait pour effacer proprement tous vos doublons de produits en passant par des requêtes SQL il vous faudra les supprimer dans chaque tables jointes.

 

J'espère qu'il existe quand même une façon de faire plus élégante et plus propre dont je ne connais pas le procédé.

Share this post


Link to post
Share on other sites

Bonjour,

 

Pour corriger ce problème sans tout supprimer de ta base de données le plus simple serait de faire un script correctif du genre

( En partant du postulat que tes références produits sont uniques )

<?php

 //Récupération des références produits en double
$referencesDouble = Db::getInstance()->ExecuteS("SELECT reference FROM `"._DB_PREFIX_."product` GROUP BY reference HAVING COUNT(reference) > 1");

foreach ( $referencesDouble as $reference ) {

   //Récupération des produits avec cette reférence
   $productsDouble = Dg::getInstance()->ExecuteS("SELECT id_product FROM "._DB_PREFIX_."product WHERE reference='".$reference['reference']."'");
   $i=0;
   
   foreach ( $productsDouble as $product ) {
    
	//On supprime uniquement à partir du 2ème produit avec la référence
	if ( $i > 0 ) {
		$productModel = new Product($product['id_product']);
		try {
		 $productModel->delete();
		} catch (PrestaShopException $exc) {
		  echo $exc->displayMessage();
		}
	}
	$i++
   }

} 


?>

Attention à bien vérifier avant de lancer ce script qu'il ne supprime que ce que tu souhaites.

Share this post


Link to post
Share on other sites

Bonjour , je voudrais utiliser votre script qui a l'air correspondre à mon problème. J4ai copier vos codes, je l'ai enregistrer dans le fichier script.php. je l'ai importer via fillezila dans mon thème. Ensuite j'ai tapé dans url de mon site nom_du_site /script.php
Une page qui s'ouvre et c'est marqué: la page que vous avez demandé, n'existe plus.
Ensuite trois fenêtre qui s'ouvre automatiquement. Les messages affichés sont tous les même :
Smarty Debug Console
included templates & config files (load time in seconds):.........
J'ai l'impression que je ratte quelque chose et que je ne procède pas correctement.
Pourriez-vous m’aider s'il vous plat?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More