Поиск дублей в базе данных. Очень быстрый способ
Появилась задача найти все дубли в базе данных и удалить их. Единственное решение видел только в написании 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
)
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
)
Комментарии
Отправить комментарий