Предлагаю вниманию хук для удаления всех дочерних комментариев при удалении комментария, т.е. мы удаляем комментарий и вместе с ним удаляются все его дочерние комментарии, и дочерние дочерних, и так далее. Другими словами, при удалении комментария удалится вся ветка ответов на него. Чтобы «удаление ветками» начало работать вставляем код в файл темы 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
Как удалить комментарий к записи в группе, где вас забанили
Возможно статья покажется бесполезной , но мало, что бывает в жизни.
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;