2011-01-05 2 views
1

Потому что у меня так много категорий, я создал один "категории" таблицы базы данных:MySQL удалить в задаче таблицы

"id_category , parent_id , category_name , category_tag" 

пример:

---------------------------------------------------------- 
    | id_category | parent_id | category_name | category_tag | 
    ---------------------------------------------------------- 
    | 1   | 0   | Cars   | cars   | 
    | 2   | 1   | Parts   | parts  | 
    | 3   | 2   | Accesories | accesories | 
    ---------------------------------------------------------- 

дерево:

Cars 
    |_Parts 
      |_Accesories 

Моя проблема возникает, когда я хочу удалить все записи в дереве. Как удалить все записи в ветке дерева из приведенного выше примера.

Возможно ли это в mySQL с PHP?

ответ

1

http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

Что вы ищете, это внешний ключ на parent_id, который ссылается на id_category с ограничением на DELETE CASCADE. Затем вы можете просто удалить корневой элемент (category_id 0), и в итоге вы получите пустую таблицу.

+0

Это правильный путь. Спасибо. – morowind

2

Посмотрите, пожалуйста, InnodB, то есть тип базы данных вашего сайта, вероятно, использует MyISAM, а также поиск Cascade Deletes.

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

Вы хотите установить действие ON DELETE на CASCADE, это приведет к каскадированию операции удаления дочерним строкам и их дочерним строкам. Таким образом, удаление родителя автоматически удалит все дети, внуки и т.д.

+0

Я только что прочитал mysql doc ... Кажется, работает. Большое спасибо за указания. – morowind

+0

Не принимаю ли я ответ? :-P –

+0

Я не знаю, как это сделать! Можете ли вы указать мне (снова :)) на направление ... – morowind

0

таблица базы данных не по существу, дерево, что вы обычно делаете это

DELETE FROM categories WHERE id_category=3 

или

DELETE FROM categories WHERE id_category=3 AND parent_id=2 
+0

Я знаю это. Вместо того, чтобы создавать 10 связанных таблиц, я хочу использовать одну таблицу. – morowind

+0

Это совсем не масштабируемо. Избегайте. –

0

Если у вас нет ключа с ограничением, вы можете удалить все только командой TRUNCATE в таблице.

Если у вас есть ключ, настроенный для удаления каскада, удаление верхнего элемента (parent_id = 0) приведет к удалению всех зависимых и поддиапазонных строк. В этом случае удаление первой строки приведет к удалению таблицы.

+0

Спасибо. Мне просто нужно прочитать больше mySql docs :) – morowind

Смежные вопросы