Итак, вот способ для поиска и удаления дубликатов статей с помощью SQL запросов к базе данных.
В данном примере предполагается, что дубликатами считаются записи в таблице `jos_content`, имеющие одинаковые значения в поле `title`.
Запросы проверены с помощью phpMyAdmin на 1.0.12LE (без дополнительных расширений). MySQL = 5.0.41-community-nt. Тем не менее, обязательно проверьте эти запросы на тестовой копии базы данных. Перед применением их на рабочей базе не забудьте предварительно создать страховую копию БД.Последовательность действий следующая:
1. Создание временной таблицы для хранения в ней id уникальных записей.
2. Поиск в таблице контента уникальных записей (не являющихся дубликатами) и запись их id во временную таблицу.
3. Удаление из таблицы контента свех строк с id не соответствующими ранее найденным уникальным записям, хранящимся во временной таблице.
4. Удаление временной таблицы.
1. Создание временной таблицы (под именем `temp1`) с одним полем, для хранения id:
(Прежде, чем выполнять запрос, убедитесь, что таблицы с именем `temp1` в вашей базе данных не существует.)
CREATE TABLE IF NOT EXISTS `temp1` ( `id` INT(11) )
--------------------------
2. Копирование во временную таблицу id всех оригинальных записей (из числа дубликатов будут выбраны записи с наименьшим значением id, т.е. созданные самыми первыми). Предполагается, что дублирующимися являются записи с одинаковыми значениями в поле `title`.
INSERT INTO `temp1` SELECT MIN(`id`) FROM `jos_content` GROUP BY `title`
(Если нужно оставить записи созданные не первыми, а самыми последними, то замените выражение MIN(`id`) на MAX(`id`)).
--------------------------
3. Удаление из таблицы контента строк с id, не записанными во временную таблицу (т.е. не уникальных).
DELETE FROM `jos_content` WHERE `id` NOT IN ( SELECT `id` FROM `temp1` )
--------------------------
4. Удаление временной таблицы:
DROP TABLE `temp1`