Oufdeladingue Posted June 20, 2014 Share Posted June 20, 2014 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 Link to comment Share on other sites More sharing options...
Oufdeladingue Posted June 20, 2014 Author Share Posted June 20, 2014 Si ça peut faire avancer les choses, je souhaite supprimer les produits dont les id sont compris entre 8973 et 13962. Link to comment Share on other sites More sharing options...
Henki Posted June 20, 2014 Share Posted June 20, 2014 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" Link to comment Share on other sites More sharing options...
Oufdeladingue Posted June 20, 2014 Author Share Posted June 20, 2014 Et comment procéder pour vider les tables correspondant à ces ID ? Link to comment Share on other sites More sharing options...
Henki Posted June 20, 2014 Share Posted June 20, 2014 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. Link to comment Share on other sites More sharing options...
Oufdeladingue Posted June 20, 2014 Author Share Posted June 20, 2014 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 ? Link to comment Share on other sites More sharing options...
Henki Posted June 20, 2014 Share Posted June 20, 2014 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é. Link to comment Share on other sites More sharing options...
herve25 Posted June 24, 2014 Share Posted June 24, 2014 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. Link to comment Share on other sites More sharing options...
Oufdeladingue Posted June 26, 2014 Author Share Posted June 26, 2014 Marqué comme résolu, Merci de votre aide ! à bientôt Link to comment Share on other sites More sharing options...
ruska Posted November 21, 2014 Share Posted November 21, 2014 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.phpUne 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 Consoleincluded 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? Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now