Запрос к базе данных чтобы удалить все посты из одной катего
Новая тема Написать ответ
# Пт Dec 02, 2011 12:27 pmDK Зарег.: 18.06.2008 ; Сообщ.: 2425Ответить с цитатой
вобщем есть категория с 500 сабкатегориями и соответсвенно постов

нужно запрос к мускулю чтобы указать главную категории и чтобы все посты из нее и сабкатегорий тоже грохнулись
# Пт Dec 02, 2011 1:21 pmf@ntom Зарег.: 11.11.2011 ; Сообщ.: 127Ответить с цитатой
Структуру бы таблицы, так ничего не понятно...
А вообще
Код:
DELETE FROM `table` WHERE `category` = 'number'

# Пт Dec 02, 2011 2:52 pmDK Зарег.: 18.06.2008 ; Сообщ.: 2425Ответить с цитатой
забыл добавить что вордпресс
# Пт Dec 02, 2011 7:06 pmdeBrain Зарег.: 03.06.2010 ; Сообщ.: 1569Ответить с цитатой
итак=\
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 написать название категории, которую нужно ёбнуть)
# Вс Dec 04, 2011 2:15 pmctapbiu Зарег.: 06.01.2008 ; Сообщ.: 328Ответить с цитатой
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';

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

Чтобы избежать подводных камней - лучше написать скриптик на пхп, который будет обходить все субкаты и сначала последовательно удалять посты, а потом уже сами категории
# Вс Dec 04, 2011 2:33 pmctapbiu Зарег.: 06.01.2008 ; Сообщ.: 328Ответить с цитатой
что-то типа
Код:

$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');
}

# Пн Dec 05, 2011 8:56 amDK Зарег.: 18.06.2008 ; Сообщ.: 2425Ответить с цитатой
тааакс, спасибо большое!, значит я лучше все субкаты вручную ебану, и получится что все посты перекачуют в главную, а ты показал как их грохнуть, как сделаю отпишу Smile
# Пн Dec 05, 2011 12:37 pmDK Зарег.: 18.06.2008 ; Сообщ.: 2425Ответить с цитатой
Работает как часы Smile

Все выполнил по пунктам - все сработало - респект!!!
Новая тема Написать ответ    ГЛАВНАЯ ~ ТЕХНИЧЕСКИЕ ВОПРОСЫ
 
Любое использование материалов, размещенных на ArmadaBoard.com, без разрешения владельцев ArmadaBoard.com запрещено.