У меня задача - отловить спам и удалить повторяющиеся записи, которые оставлены на разных страницах.
Есть таблица комментариев jos_jcomments в которой комментарии. Есть таблица материалов, к которым пишутся комментарии jos_content. Удалить повторяющиеся комментарии внутри одного материала - легко.
Вот запрос:
DELETE com1 FROM jos_jcomments AS com1, jos_content AS con, jos_jcomments AS com2 WHERE com1.object_id=con.id AND com2.object_id=con.id AND con.sectionid = 2 AND com1.object_id=com2.object_id AND com1.id != com2.id AND com1.comment = com2.comment
Он работает, так как соединение таблиц из одного типа материала (всего много сотен тысяч комментов, комментов к данному типу в районе пары сотен тысяч, комментов к каждому материалу в пределах сотни) делает довольно узкий срез. Но когда я убираю ограничение на то, что эти два коммента с разными идентификаторами но с одинаковым содержимым могут принадлежать разным материалам, то вылезает ошибка больших запросов. Даже если я убираю ограничение
SET SQL_BIG_SELECTS=1;
всё равно запрос не работает.
Я скопировал все комментарии данного типа материалов в отдельную таблицу чтобы было меньше сотни тысяч комментариев всего в таблице, всё равно не помогло.
Как бы вы поступили в данном случае?