Как удалить все комментарии в группе Вконтакте

Предлагаю вниманию хук для удаления всех дочерних комментариев при удалении комментария, т.е. мы удаляем комментарий и вместе с ним удаляются все его дочерние комментарии, и дочерние дочерних, и так далее. Другими словами, при удалении комментария удалится вся ветка ответов на него. Чтобы «удаление ветками» начало работать вставляем код в файл темы functions.php.

/* Удаление всех дочерних комментариев (всего дерева) при удалении комментария ———————————————————————————- */ add_action(‘delete_comment’, ‘del_child_comments_on_del_comment’); function del_child_comments_on_del_comment($comment_id)< global $wpdb; // если нет детей, возвращаем if( !$child_comments = $wpdb->get_col(«SELECT comment_ID FROM $wpdb->comments WHERE comment_parent=’$comment_id'») ) return; foreach( $child_comments as $val ) wp_delete_comment($val); >

Ключевые моменты хука: фильтр — delete_comment и функция — wp_delete_comment() : Над кодом я просидел прилично, потому что тут используется рекурсия, а она часто вредная и я с ней не очень.

Как удалить комментарий в ВКонтакте метод рабочий!!

В программировании рекурсия — вызов функции из неё же самой (простая рекурсия) или через другие функции (сложная или косвенная рекурсия). Например, функция A вызывает функцию B, а функция B — функцию A. Количество вложенных вызовов функции или процедуры называется глубиной рекурсии.

Сидел сначала и пробовал натурально использовать рекурсию (написал функцию, повесил её на хук и вызывал её из нее же самой) — что надо не выходило, а код только рос. В один момент, как только я пошел налить себе чайку, пришла её величество Эврика и я все понял: замыкание будет происходить при срабатывании хука delete_comment в момент очередных вызовов функции wp_delete_comment() и не надо вызывать функцию из функции в чистом виде, т.е. будет косвенная рекурсия.

Еще по теме:  Магазин Вконтакте как создать

Честно говоря, плохо могу себе представить реальную ситуацию, на обычном блоге, где бы такое удаление комментариев было особо нужно. Однако, оно логично и может кому-то понадобится. На этом блоге я сделал именно так, потому что, если удалить комментарий у которого есть дочерние комментарии, то смысл дочерних комментариев чаще всего будет просто потерян: будут комментарии не понятно о чем. Приводя аллегорию — это комментарии к посту, без самого поста. Думаю, мне такое тут не надо.

Перемещение в корзину

После того, как задача с удалением была решена, по проторенной дороге, я написал такое же перемещение комментариев ветками в корзину и извлечение их ветками из корзины. Принцип тот же самый, только используются теперь фильтры: trash_comment , untrash_comment и функции: wp_trash_comment() , wp_untrash_comment() :

/* Перемещение в корзину всех дочерних комментариев (вся глубина дерева), при удалении комментария —————————————————————————————————- */ add_action(‘trash_comment’, ‘trash_child_comments_on_trash_comment’); function trash_child_comments_on_trash_comment($comment_id)< global $wpdb; // если нет детей, возвращаем if( !$child_comments = $wpdb->get_col(«SELECT comment_ID FROM $wpdb->comments WHERE comment_parent=’$comment_id'») ) return; foreach( $child_comments as $val ) wp_trash_comment($val); > add_action(‘untrash_comment’, ‘untrash_child_comments_on_untrash_comment’); function untrash_child_comments_on_untrash_comment($comment_id)< global $wpdb; // если нет детей, возвращаем if( !$child_comments = $wpdb->get_col(«SELECT comment_ID FROM $wpdb->comments WHERE comment_parent=’$comment_id'») ) return; foreach( $child_comments as $val ) wp_untrash_comment($val); >

Упрощенная запись перемещения в корзину

Вот весьма интересный код, для тек кто разбирается в php: упрощенная версия записи для кода выше (для корзины). Здесь интересно посмотреть как можно использовать функцию current_filter() и необычный вызов функции PHP, динамичный, с использованием переменной ( $use_function($val) ). В общем, смотрите сами:

Как удалить все комментарии в контакте


/* Перемещение в корзину всех дочерних комментариев (вся глубина дереса), при удалении комментария —————————————————————————————————- */ add_action(‘trash_comment’, ‘trash_untrash_child_comments_with_parent’); add_action(‘untrash_comment’, ‘trash_untrash_child_comments_with_parent’); function trash_untrash_child_comments_with_parent($comment_id)< global $wpdb; // если нет детей, возвращаем if( !$child_comments = $wpdb->get_col(«SELECT comment_ID FROM $wpdb->comments WHERE comment_parent=’$comment_id'») ) return; foreach( $child_comments as $val ) < // получим wp_trash_comment или wp_untrash_comment $use_function = ‘wp_’. current_filter(); $use_function($val); >>

Еще по теме:  Где Вконтакте понравилось в приложении
До этого из: Код (коддинг)
До этого из: Комментарии (comments)
  • Нумерация комментариев в WordPress
  • Функция вывода постов по количеству комментариев
  • Автоматическое растягивание textarea на javascript и jQuery

Источник: wp-kama.ru

Как удалить комментарий к записи в группе, где вас забанили

aeza

Возможно статья покажется бесполезной , но мало, что бывает в жизни.
1) Зайдите в группу где вас забанили с другого аккаунта или просто не заходя в аккаунт.
2) Скопируйте ссылку на нужный комментарий. Она имеет вид http://vk.com/wall-X_Y?reply=Z,
где -X — owner_id, Y — post_id и Z — comment_id.
3) Затем заходим на страницу http://vk.com/dev/wall.deleteComment ,вставляем полученные параметры в соответствующие поля и выполняем запрос. Важно параметр owner_id нужно указывать именно с минусом.
Если сделали все правильно комментарий удалиться

Источник: mipped.com

Как вк удалить все записи в группе: Как быстро удалить все записи со стены «ВКонтакте»

Как удалить все строки по группам, кроме первой и последней в SQL Server?

спросил 3 года 5 месяцев назад

Изменено 3 года, 5 месяцев назад

Просмотрено 5к раз

У меня есть такие данные

Id Name AuthorId —————- 1 ААА 2 2 ВВВ 2 3 ССС 2 4 ДДД 3 5 ЭЭЭ 3

Мне нужен запрос, который удалит все строки по группе AuthorId, если их больше 2, кроме первой и последней.

Например, в приведенных выше данных следует удалить вторую строку, потому что для AuthorId = 2 у меня 3 строки, а для AuthorId = 3 ничего не будет удалено

  • sql
  • sql -server
  • group-by
  • sql-delete

Row_number() дважды и удалить нетерминалы

удалить т от ( выбирать *, row_number() over (раздел по [AuthorId] порядок по [Id]) n1, row_number() over (раздел по [AuthorId] порядок по [Id] desc) n2 из имени таблицы ) т где n1 > 1 и n2 > 1

Еще по теме:  Не могу попасть на свою страницу Вконтакте что делать

Вы можете попробовать использовать объединение для минимального и максимального идентификатора, а НЕ в результате этого подзапроса

удалить из my_table где id НЕ В ( выберите мин (идентификатор) из my_table сгруппировать по AuthorId союз выберите макс (идентификатор) из my_table сгруппировать по AuthorId )

Вы можете попробовать это:

удалить t из имени таблицы t где существует ( выберите 1 из имени таблицы где authorid = t.authorid и id > t.id ) и существует ( выберите 1 из имени таблицы где authorid = t.authorid и id < t.id )

См. демонстрацию.
Результаты:

Идентификатор Имя AuthorId 1 ААА 2 3 ССС 2 4 ДДД 3 5 ЭЭЭ 3

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Требуется, но не отображается

Опубликовать как гость

Требуется, но не отображается

group by — MySQL: удалить все строки старше 30 дней, но только если их больше одной

спросил 6 лет, 11 месяцев назад

Изменено 5 лет, 11 месяцев назад

Просмотрено 8к раз

Мне нужно очистить таблицу, содержащую более 14 000 000 строк. Я хочу удалить все записи старше 30 дней, но только если количество сгруппированных элементов больше одного. Значит, останется хотя бы один предмет.

Получение элементов и их удаление по дате — не такая уж проблема. Но он удалит все.

УДАЛИТЬ ИЗ проанализировано ГДЕ метка времени

Я так и думал

SELECT * ИЗ проанализировано ГДЕ TIMESTAMP < UNIX_TIMESTAMP (DATE_SUB (СЕЙЧАС (), ИНТЕРВАЛ 8 ДНЕЙ)) И ( ( ВЫБЕРИТЕ КОЛИЧЕСТВО(*) ИЗ проанализировано СГРУППИРОВАТЬ ПО item_id ) >1 )

Но это не сработает. Спасибо за помощь!

В противном случае я бы рекомендовал заниматься поэтапно.

Сначала найдите элементы, которые нужно удалить. Это будет относительно быстро и неинвазивно.

СОЗДАТЬ ВРЕМЕННУЮ ТАБЛИЦУ t (ПЕРВИЧНЫЙ КЛЮЧ (идентификатор_элемента)) ВЫБЕРИТЕ item_id, MAX (отметка времени) AS keeper ИЗ проанализировано ГДЕ метка времени 1;

Рейтинг
( Пока оценок нет )
Загрузка ...