Как удалить записи-дубликаты в Mysql на примере характеристик PrestaShop

Время чтения: 3 минуты
0 1991

Сегодня была задача: удалить дубликаты характеристик в товаре на CMS PrestaShop.

Как это сделать, смотрите ниже, но сначала лучше сделаем выборку и проверим, что выводит правильно:

SELECT * FROM `prstshp_feature_product` 
    INNER JOIN (SELECT min(id_feature_value) minid, id_feature, id_product 
        FROM prstshp_feature_product 
        GROUP BY id_feature, id_product HAVING count(1) > 1
        ) AS duplicates ON 
    (    duplicates.id_feature = prstshp_feature_product.id_feature 
        AND duplicates.id_product = prstshp_feature_product.id_product 
        AND duplicates.minid <> prstshp_feature_product.id_feature_value
    )

Коротко поясню, что где указано:

prstshp_feature_product - название таблицы, в которой ищем дубликаты

min(id_feature_value) - для меня это минимальное значение характеристики товара, для вас может быть поле id записи

INNER JOIN - выведем таблицу справа, чтобы сравнить и выполнить подзапрос на дубликат, запросу дадим имя через "AS" duplicates

id_feature, id_product - это поля в таблице, по которым нужно найти дубликаты

В конструкции INNER JOIN, пишем наше условие в ON(..), где сначала указываем, предполагаемые равные поля, а в конце сравниваем "<>" id дубликатов и основного запроса, в моем случае это id_feature_value.

Выполняем сначала SELECT для сверки, а потом уже можно и удалить записи. Где SELECT * FROM меняем на DELETE [название основного запроса, в моем случае название таблицы] FROM:

DELETE prstshp_feature_product FROM `prstshp_feature_product` 
    INNER JOIN (SELECT min(id_feature_value) minid, id_feature, id_product 
        FROM prstshp_feature_product 
        GROUP BY id_feature, id_product HAVING count(1) > 1
        ) AS duplicates ON 
    (    duplicates.id_feature = prstshp_feature_product.id_feature 
        AND duplicates.id_product = prstshp_feature_product.id_product 
        AND duplicates.minid <> prstshp_feature_product.id_feature_value
    )

« Все статьи

Комментарии 0 комментариев
Только авторизованные пользователи могут оставлять комментарии. Войдите, пожалуйста.
Что еще посмотреть?