Поиск дублей в базе данных. Очень быстрый способ

Появилась задача найти все дубли в базе данных и удалить их. Единственное решение видел только в написании php скрипта с вложенными друг в друга циклами и проверки значения нужных полей и неравенства id, но скрипт работает очень медленно. В sql есть много возможностей кроме основных операций и решил попробовать найти решение в самом языке.

select Поле_для_проверки_на_дубль, count(*) from имя_базы group by Поле_для_проверки_на_дубль having count(*) > 1;

Этот способ работает очень быстро, 11000 записей переваривает за пару секунд и нашел 320 дублей.

После этого осталось только выполнить запрос скриптом и удалить

$result = mysql_query("select Поле_для_проверки_на_дубль, count(*) from имя_базы group by Поле_для_проверки_на_дубль having count(*) > 1;");

while ($row = mysql_fetch_assoc($result))
{
    echo "Есть дубль ".$row['id']." - ".$row['Поле_для_проверки_на_дубль']."<br/>";
    $result2 = mysql_query("DELETE FROM имя_базы WHERE id='".$row['id']."';");
}


Еще один способ

SELECT *
FROM `items`
WHERE CONCAT( `items`.`brandid` , `items`.`model` )
IN (


SELECT CONCAT( `items`.`brandid` , `items`.`model` ) AS x
FROM `items`
GROUP BY x
HAVING COUNT( x ) >1
)
 

Комментарии

Популярные сообщения из этого блога

Две сетевые карты Windows 7. Настройка маршрутизации

Cisco Packet Tracer + Русификатор

Восстановление конфигурации Cisco с tftp сервера