2011-01-05 15 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 

私の問題は、ツリー内のすべてのレコードを削除するときに発生します。 上記の例のツリーブランチ内のすべてのレコードを削除するにはどうすればよいですか。

これはPHPでmySQLで可能ですか?

答えて

1

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

されないが、

あなたが探しているのは、制約がON DELETE CASCADEのid_categoryを参照するparent_idの外部キーです。次に、ルート要素(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の関連するテーブルを作成します。私は1つのテーブルを使用したいと考えています。 – morowind

+0

これはスケーラビリティが全くありません。避ける。 –

0

キー制約がない場合は、テーブルのTRUNCATEコマンドだけですべてを削除できます。

カスケード削除用にキーが設定されている場合は、一番上の項目(parent_id = 0)を削除すると、依存する行と削除された行がすべて削除されます。この場合、最初の行を削除するとテーブルが空になります。

+0

ありがとうございます。mySqlドキュメントをもっと読む必要があります:) – morowind