Задавайте вопросы, мы ответим
Вы не зашли.
Доброго времени суток! Помогите с такой проблемой. Искал поиском, нашел подобную тему, но там была другая задача.
Необходимо удалить дубликаты строк в таблице. Таблица большая, около 100.000 записей. Дубликатов 10-25%.
Примерный вид таблицы:
ID, post_date, post_title, post_name, и т.д т.п
ID - уникальное поле, у каждого свой идентификатор от 1 до 100 тыс, везде разные
post_date - дата, уникальная для каждого поста, везде даты разные. У всех дубликатов даты различные (добавлялись дубли под разными датами)
post_content - сам текст
post_name - уникальный закодированный заголовок каждого поста, типа %d0%bf%d0%b0%d1
нужно удалить дубликаты строк. ID у всех разный. Насколько я понимаю, нужно сравнивать по post_name, если post_name совпадают, то оставлять 1 строку с уникальным post_name, а остальные удалять
Как это реализовать? помогите с запросом
Заранее благодарен!
Неактивен
Ну.. мне в голову приходит такое:
вначале выбираем айди всех уникальных записей.
Неактивен
Спасибо за ответ!
Попробывал, первый запрос сработал - значения собрались в отдельную таблицу. Второй запрос - выбивает ошибку:
#1016 - Can't open file: 'mytable.MYI' (errno: 145)
Неактивен
145 ошибка — «табличка побилась и ее надо восстановить».
REPAIR TABLE mytable
Перед удалением учтите, что в других табличках могут быть ссылки на удаляемые посты.
Т.е. Вы можете легко сделать свою базу неконсистентной.
Ну и можно переписать удаление менее очевидным способом (в надежде, что оно будет
работать чуть быстрее):
DELETE tn
FROM tablename tn
JOIN (SELECT MAX(ID) AS ID FROM tablename GROUP BY post_name HAVING COUNT(*) > 1) tn2 USING(ID)
Неактивен