Avisos
Vaciar todo

Quitar productos duplicados en prestashop  

 
Enrique
 Enrique
Reputable Member

Hola, pues necesitaria por favor una pequeña ayuda con alguna consulta sql.

Con las pruebas de importación csv, tengo unos 1000 a 2000 productos duplicados y deberia quitarlos antes de seguir probando. Además me estan matando y no es bueno para el seo.

1- Concretamente quitar los productos duplicados por el campo "nºreferencia" en phpmyadmin.

Seria fenomeno y no perder medio dia uno a uno. He estado leyendo pero no me fio ni lo veo claro.

muchas gracias de nuevo y saludos

URL del sitio: Contenido solo visible a usuarios registrados

Citar
Respondido : 17/09/2016 12:03 pm
Pepe
 Pepe
Soporte CMS Webempresa Admin

Hola Enrique.

Existe un modulo que te puede ayudar:
Módulo para eliminar el ID de la URL en PrestaShop

Otra opción es exportar a un archivo csv y eliminarlos manualmente, una vez con la lista de productos correcta, volver a importarla prestashop.

Un saludo

ResponderCitar
Respondido : 17/09/2016 12:21 pm

wpdoctor-revisa-la-salud-de-tu-wordpress

Enrique
 Enrique
Reputable Member

Hola.
Disculpame Pepe, pero esto no es lo que necesito. No tiene nada que ver con lo que me pasa.

Muchisimas gracias y un saludo.

ResponderCitar
Respondido : 17/09/2016 12:35 pm
Pepe
 Pepe
Soporte CMS Webempresa Admin

Hola Enrique.
Quieres eliminar productos duplicados?

Una de las opciones son las que te mostré, otra opción es mediante un consulta en MySQL.
Puedes probar con con esta consulta:

SELECT
     f1.id_feature,
     f1.id_product,
     f1.id_feature_value,
     count(*) AS counter,
     CONCAT(
          'DELETE FROM ps_feature_product WHERE id_feature=',
           id_feature,
           ' AND id_product=' ,
           id_product , ' AND id_feature_value=',
           id_feature_value , ' LIMIT ', count(*) -1 , ';' 
     )
FROM
     ps_feature_product f1
GROUP BY
     id_feature,id_product,id_feature_value
HAVING
     count(id_product) > 1 and count(id_feature) > 1
     AND count(id_feature_value) > 1;

El resultado de esta consulta será un listado de todos los campos duplicados y el número de veces que está duplicado.

Por último, en la quinta columna devolverá una serie de consultas SQL que al ejecutarlas, eliminarán todos los campos duplicados excepto uno, que será el que nos interese que se quede en la base de datos.

Tan sólo tenéis que cambiar el prefijo de la tabla que utiliza la tabla de prestashop que he dejado en la consulta (ps_) por el prefijo que tengáis en la base de datos de tu tienda.

Nota: antes de realizar ningún cambio en BD, recuerda la copia de seguridad

Un saludo

ResponderCitar
Respondido : 17/09/2016 1:12 pm

Cursos Gratuitos WordPress

Enrique
 Enrique
Reputable Member

Gracias Pepe.

-Si que lo unico que pedia era una consulta sql para eliminar los registros de productos duplicados, pero por el campo "referencia" no por la id del producto (me parece que esta consulta es con la id ?, tampoco se sql, igual no es asi).

Tambien se me va eso que dices de la quinta columna...

Saludos y muchas gracias

ResponderCitar
Respondido : 17/09/2016 3:46 pm
Pepe
 Pepe
Soporte CMS Webempresa Admin

Hola Enrique.

Por que no exportas los datos y con un editor, editas el archivo csv, eliminas los productos que tienes duplicados y los vuelves a importar:

.-Accede a Productos y click en Exportar.

Esto genera un archivo CSV donde podrás modificar el stock de los productos.

Una vez gererado el nuevo archivo CSV.
.- Accede a Parámetros avanzados -> Importación CSV e importa los nuevos datos.

Importar categorías y productos en Prestashop

Un saludo

ResponderCitar
Respondido : 17/09/2016 4:01 pm

optimiza-automaticamente-todas-las-imagenes-de-tu-wordpress

Enrique
 Enrique
Reputable Member

Ya, pero si los productos ya los tengo sin duplicar en el archivo csv fuente.

Además son unos 2000 para borrarlos uno a uno en el backend de prestashop, debo mantenerlos en prestashop pero sin duplicar para mantener las redireciones de productos al volver a importar por referencia.

Seguro que se pude hacer por una simple consulta, por favor agradeceria me respondierais solo sobre esto.

Saludos.

ResponderCitar
Respondido : 17/09/2016 4:25 pm
Enrique
 Enrique
Reputable Member

Hola, mientras contestais.
He estado probando y reprobando en local y no lo consigo. He probado con varias consultas que he visto en la web:

1- la de copiar la tabla ps_product: y al copiarla lo hace bien, quita los duplicados y se queda con los id primeros) pero hay que andar añadiendo cosas como el autonumerico del id y no se si al final no se queda igual. No me fio.

2- consultas como esta:
DELETE FROM ps_product WHERE reference NOT IN(
SELECT MAX(id_product)
GROUP BY (reference)
);

Pero me borra todos los productos.

Se que falta poco para conseguir algo que no borre la tabla tipo al paso 2, pero claro, no se sql.

Muchas gracias y saludos.

ResponderCitar
Respondido : 18/09/2016 2:51 pm

Jhon
 Jhon
Soporte CMS Webempresa Moderator

Hola

Creo que la consulta esta mal

DELETE FROM ps_product WHERE reference NOT IN(
SELECT MAX(id_product)
GROUP BY (reference)
);

Creo que debería ser :

DELETE FROM ps_product WHERE id_product IN(
SELECT MAX(id_product)
GROUP BY (reference)
);

Prueba esto, sería bueno que lo pruebes en un clon de tu base de datos, o realiza un backup antes de hacer esta consulta

Saludos.

ResponderCitar
Respondido : 19/09/2016 6:11 pm
Enrique
 Enrique
Reputable Member

Hola.
Me borra todo de nuevo.

Llevo todo el dia de ayer buscando y probando y no encuentro nada. A ver si dais con la tecla.

EN local pruebo copiando la tabla a otra y pruebo en esa otra. Duplico los dos o tres primeros productos (que los añade al final con distintas y nuevas id y desactivados) y no consigo nada.

A ver si tenemos suerte.

Muchas gracias y saludos

ResponderCitar
Respondido : 19/09/2016 10:05 pm

Gestor de Contraseñas - VPN Conexión Segura - Gestor 2FA (Segundo Factor de Autenticación

Jhon
 Jhon
Soporte CMS Webempresa Moderator

Hola

Para que la sentencia SQL anterior funcione ambos productos deben tener el mismo texto en el campo referencia, de otro modo no funcionará

DELETE FROM ps_product WHERE id_product IN(
SELECT MAX(id_product)
GROUP BY (reference)
);

Saludos.

ResponderCitar
Respondido : 19/09/2016 11:44 pm
Enrique
 Enrique
Reputable Member

Hola.

Está bien escrito. Pero dejemos el tema si os parece, ya que es bastante engorroso.

Al final he restaurado de una copia de seguridad. Se tarda más tiempo que en mandar una consulta, pero que le vamos a hacer. Haré siempre una antes de importar por si acaso y listo.

Muchas gracias Pepe y Jhon por puestro tiempo en este asunto.

Saludos.

ResponderCitar
Respondido : 20/09/2016 10:54 am

wpdoctor-revisa-la-salud-de-tu-wordpress