Модуль комментариев дает как минимум четыре новых таблицы (comment, field_data_comment_body, field_revision_comment_body, node_comment_statistics) и возможно в других следит.
Поэтому вряд-ли кто решится SQL составлять.
Зато в файле comment.module есть функция comment_delete_multiple — на вашем месте я бы попытался бы ее как нибудь вызвать, например через небольшой самописный модуль или через batch api
Надо поместить файл с этим кодом в корневую директорию и выполнить, открыв в браузере.
Через командную строку он не работает (не знаю еще как правильно сделать)
Вы либо не совсем понимаете последствий, либо я чего-то не понимаю(в вашем случае будет проще набрать 100 комментов и отключить возможность комментирования, и задача решена и удалять лишние комменты придется 1 раз) DELETE c, fd, fr, nc FROM {comment}AS c, {field_data_comment_body}AS fd, {field_revision_comment_body}AS fr, {node_comment_statistics}AS nc WHERE c.cid >100 AND c.cid = fd.cid AND fd.cid=fr.cid AND nc.cid=c.cid(не помню точно чем там все эти таблицы между собой вяжутся, однако смысл вроде должен быть понятен) после выполнения этого запроса, у вас останется 100 первых комментов(если конечно ничего не удаляли), может получиться так, что все 100 будут у одного материала, а у всех остальных будет всегда 0, ну или у одного материала 60, у другого 40, у остальных всегда 0. Или условия все же другие?
З.Ы. Метод smallredstone безопасный, но очень долгий(под очень долгим, значит, что Вы рискуете словить таймаут при выполнении(вроде 200 коментов для этого должно хватить на среднем хостинге)), потому его разумнее пихать в пакетник, прямой SQL запрос используйте только если вы уверены в своих действиях и осознаете последствия.
скорее всего просто капчу сайта пробили (если она вообще была) и пошел спам. Надежды на то, что в последнее время были комментарии мало, вот и решили удалить махом все что понаприходило. Угадал?)
Значит тот запрос Вам подходит как основа(ибо не помню ни точных названий таблиц, ни по каким полям эти таблицы между собой связаны), но опять же учтите, что с прямым запросом не сработают хуки(если у Вас много модулей работающих с коментами, то последствия могут быть малоприятными), а так же не очистится кэш(т.е. сайт будет себя вести так, будто ничего и не случилось, пока кэш не почистите), так что юзать быстрый прямой запрос или написать медленный, но надежный пакетник - решать Вам.(бэкапить БД в любом случае)
Комментарии
с 100 чего?
Модуль комментариев дает как минимум четыре новых таблицы (comment, field_data_comment_body, field_revision_comment_body, node_comment_statistics) и возможно в других следит.
Поэтому вряд-ли кто решится SQL составлять.
Зато в файле comment.module есть функция
comment_delete_multiple
— на вашем месте я бы попытался бы ее как нибудь вызвать, например через небольшой самописный модуль или через batch apiВсе гораздо проще на самом деле
define('DRUPAL_ROOT', getcwd());
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
$cids = db_query('SELECT cid FROM {comment} WHERE cid>100')->fetchCol();
comment_delete_multiple($cids);
echo 'all done';
Надо поместить файл с этим кодом в корневую директорию и выполнить, открыв в браузере.
Через командную строку он не работает (не знаю еще как правильно сделать)
Почему?
однако
Вы не забывайте, что там по сути в одной таблице данные для ВСЕХ комментариев на ВСЕМ сайте.
с 100 чего? - cid
нужно удалить все комменты начиная с сid 100 по последнюю
то что комменты лежат аж в четырех разных таблицах и не подумал, спасибо, буду искать оптимальное решение
а если кто уже знает пожалуйста отпишите
А чем не устраивает то, что предложил smallredstone?
upd: наверное даже файл создавать не надо, запустить в template.php из какого-нибудь хука обработки страницы
Вы либо не совсем понимаете последствий, либо я чего-то не понимаю(в вашем случае будет проще набрать 100 комментов и отключить возможность комментирования, и задача решена и удалять лишние комменты придется 1 раз)
DELETE c, fd, fr, nc FROM {comment} AS c, {field_data_comment_body} AS fd, {field_revision_comment_body} AS fr, {node_comment_statistics} AS nc WHERE c.cid > 100 AND c.cid = fd.cid AND fd.cid=fr.cid AND nc.cid=c.cid
(не помню точно чем там все эти таблицы между собой вяжутся, однако смысл вроде должен быть понятен) после выполнения этого запроса, у вас останется 100 первых комментов(если конечно ничего не удаляли), может получиться так, что все 100 будут у одного материала, а у всех остальных будет всегда 0, ну или у одного материала 60, у другого 40, у остальных всегда 0. Или условия все же другие?З.Ы. Метод smallredstone безопасный, но очень долгий(под очень долгим, значит, что Вы рискуете словить таймаут при выполнении(вроде 200 коментов для этого должно хватить на среднем хостинге)), потому его разумнее пихать в пакетник, прямой SQL запрос используйте только если вы уверены в своих действиях и осознаете последствия.
Совсем забыл, там еще и сущности подвязаны
скорее всего просто капчу сайта пробили (если она вообще была) и пошел спам. Надежды на то, что в последнее время были комментарии мало, вот и решили удалить махом все что понаприходило. Угадал?)
Угадал))) спам-комментов аж 2тыщи с копейками )
капча была
Значит тот запрос Вам подходит как основа(ибо не помню ни точных названий таблиц, ни по каким полям эти таблицы между собой связаны), но опять же учтите, что с прямым запросом не сработают хуки(если у Вас много модулей работающих с коментами, то последствия могут быть малоприятными), а так же не очистится кэш(т.е. сайт будет себя вести так, будто ничего и не случилось, пока кэш не почистите), так что юзать быстрый прямой запрос или написать медленный, но надежный пакетник - решать Вам.(бэкапить БД в любом случае)
спасибо
возможно VBO(Views Bulk Operations) сможет помочь..