АРМАДА
Запрос к базе данных чтобы удалить все посты из одной катего
Новая тема Написать ответ Advanced Hosters - профессиональный хостинг

DK +
wordpress
Зарегистрирован: 18.06.2008
Сообщений: 2425
Обратиться по нику
# Добавлено:Пт Dec 02, 2011 12:27 pmДобавить в избранноеОтветить с цитатой
вобщем есть категория с 500 сабкатегориями и соответсвенно постов

нужно запрос к мускулю чтобы указать главную категории и чтобы все посты из нее и сабкатегорий тоже грохнулись

[email protected]
Опытный
Зарегистрирован: 11.11.2011
Сообщений: 127
Обратиться по нику
# Добавлено:Пт Dec 02, 2011 1:21 pmОтветить с цитатой
Структуру бы таблицы, так ничего не понятно...
А вообще
Код:
DELETE FROM `table` WHERE `category` = 'number'

VisitWeb.Com - самая прибыльная тизерка !!!
Выделенные серверы и VPS по самым низким ценам. От 10$ в месяц!

DK +
wordpress
Зарегистрирован: 18.06.2008
Сообщений: 2425
Обратиться по нику
# Добавлено:Пт Dec 02, 2011 2:52 pmОтветить с цитатой
забыл добавить что вордпресс

deBrain
V.I.P.
Зарегистрирован: 03.06.2010
Сообщений: 1569
Обратиться по нику
# Добавлено:Пт Dec 02, 2011 7:06 pmОтветить с цитатой
итак=\
SELECT term_id FROM `wp_terms` WHERE `name`='$name' - получаем ID интересующей нас категории, где $name - название категории

Получили `term_id`. Далее:
SELECT `term_taxonomy_id` FROM `wp_term_taxonomy` WHERE `wp_term_taxonomy`.`term_id`=`wp_terms`.`term_id`AND `taxonomy`='category' AND (`parent`=0 OR `parent`=`term_taxonomy_id`) - должны получить категорию и её подкатегории.

Далее:
SELECT `object_id` FROM `wp_term_relationships` WHERE `wp_term_taxonomy`.`term_taxonomy_id` - получаем все посты связанные со спарсенными выше категориями.

Далее:
DELETE FROM `wp_posts` WHERE `ID`=`wp_term_relationships`.`object_id` - вуаля

Я не очень силён во многовложенных запросах (вообще SQL запросах) и структуре БД вордпресса, но если я не ошибся, то вот этот волшебный запрос должен тебе помочь:
Код:

DELETE FROM `wp_posts` (
   SELECT `object_id` (
      SELECT `term_taxonomy_id` (
         SELECT term_id FROM `wp_terms` WHERE `name`='$name'
      ) FROM `wp_term_taxonomy` WHERE `wp_term_taxonomy`.`term_id`=`wp_terms`.`term_id` AND `taxonomy`='category' AND (`parent`=0 OR `parent`=`term_taxonomy_id`)
   ) FROM `wp_term_relationships` WHERE `wp_term_taxonomy`.`term_taxonomy_id`
) WHERE `ID`=`wp_term_relationships`.`object_id`



Только не забудь вместо $name написать название категории, которую нужно ёбнуть)
Правильно вкладываем свободные средства в ПАММ
Правильный хостинг: DigitalOcean

ctapbiu
Опытный
Зарегистрирован: 06.01.2008
Сообщений: 328
Обратиться по нику
# Добавлено:Вс Dec 04, 2011 2:15 pmОтветить с цитатой
DK,
1. Удаляем посты, находящиеся в категориях, где ID родителя 5
Код:

DELETE FROM wp_posts WHERE ID IN (SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id IN (SELECT `term_taxonomy_id` FROM `wp_term_taxonomy`  WHERE `parent`='5'))



2. По аналогии удаляем пост меты
Код:

DELETE FROM wp_postmeta WHERE post_id IN (SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id IN (SELECT `term_taxonomy_id` FROM `wp_term_taxonomy`  WHERE `parent`='5'))



3. Удаляем связи категорий с постами
Код:
DELETE FROM  `wp_term_relationships` WHERE `term_taxonomy_id` IN (SELECT `term_taxonomy_id` FROM `wp_term_taxonomy`  WHERE `parent`='5')



4. Удаляем сами субкаты
Код:

DELETE FROM  `wp_terms` WHERE `term_id` IN (SELECT `term_taxonomy_id` FROM `wp_term_taxonomy` WHERE `parent`='5');
DELETE FROM `wp_term_taxonomy`  WHERE `parent`='5';


ctapbiu
Опытный
Зарегистрирован: 06.01.2008
Сообщений: 328
Обратиться по нику
# Добавлено:Вс Dec 04, 2011 2:16 pmОтветить с цитатой
Подводные камни:
1. не удалятся приатаченные к посту файлы (картинки, ...)
2. не удалятся субкатегории субкатегорий (и так далее по вложенности)

Чтобы избежать подводных камней - лучше написать скриптик на пхп, который будет обходить все субкаты и сначала последовательно удалять посты, а потом уже сами категории

ctapbiu
Опытный
Зарегистрирован: 06.01.2008
Сообщений: 328
Обратиться по нику
# Добавлено:Вс Dec 04, 2011 2:33 pmОтветить с цитатой
что-то типа
Код:

$cat = 5; //id категории, которую нужно удалить

$categories = get_categories('orderby=id&order=desc&child_of='.$cat);
$cat_ids = array($cat);
foreach ($categories as $category) {
  $cat_ids[] = $category->cat_ID;
}

$posts = get_posts('numberposts=-1&cat='.join(',', $cat_ids));
foreach ($posts as $post) {
  wp_delete_post($post->ID, true);
}

foreach ($cat_ids as $id) {
  wp_delete_term($id, 'category');
}


DK +
wordpress
Зарегистрирован: 18.06.2008
Сообщений: 2425
Обратиться по нику
# Добавлено:Пн Dec 05, 2011 8:56 amОтветить с цитатой
тааакс, спасибо большое!, значит я лучше все субкаты вручную ебану, и получится что все посты перекачуют в главную, а ты показал как их грохнуть, как сделаю отпишу Smile

DK +
wordpress
Зарегистрирован: 18.06.2008
Сообщений: 2425
Обратиться по нику
# Добавлено:Пн Dec 05, 2011 12:37 pmОтветить с цитатой
Работает как часы Smile

Все выполнил по пунктам - все сработало - респект!!!
Новая тема Написать ответ    ГЛАВНАЯ ~ ТЕХНИЧЕСКИЕ ВОПРОСЫ

Перейти:  





Генеральный спонсор



Партнеры