1
id name      parentid
 1 category     0
 2 question1    1
 3 type1        2
 4 type2        2
 5 question2    0
 6 type2        5
 7 type2        5

どこ:

  • カテゴリは親です
  • question1question2は子です
  • type1type2type3およびtype4は孫です

選択した親とすべての子レコードを削除する MySQL ステートメントを作成したいと考えています。どうやってやるの?

4

3 に答える 3

2

MySQL は再帰クエリをサポートしていません...

あらかじめ決められた深さがある場合は、いくつかの結合でそれを行うことができます。

それ以外の場合は、アプリケーション内のコードで実行するか、ストアド プロシージャ/関数を記述して実行する必要があります。

編集:削除するクイック再帰関数...

function recursiveDelete($id) {
    $result=mysql_query("SELECT * FROM yourTable WHERE parentid='$id'");
    if (mysql_num_rows($result)>0) {
         while($current=mysql_fetch_array($result)) {
              recursiveDelete($current['id']);
         }
    }
    mysql_query("DELETE FROM yourTable WHERE id='$id'");
}
于 2012-05-21T08:57:16.573 に答える
0

これをサポートする外部キーを作成できます。

MySQLでは、この操作は次のようになります。

ALTER TABLE your_table_name ADD CONSTRAINT your_table_name_parentid_to_id
FOREIGN KEY (parentid)
REFERENCES your_table_name (id)
ON DELETE CASCADE ON UPDATE CASCADE; 

次に、単に

DELETE FROM your_table_name WHERE id = 2;

質問1、タイプ1、タイプ2を削除します。

ただし、この場合、各parentid値に等しいid値があるか、parentidがNULLであることを確認してください。

   id名parentid
   1つのカテゴリNULL
   2質問11
   3タイプ12
   4タイプ22
   5質問21
   6タイプ25
   7タイプ25
于 2012-05-21T09:02:35.077 に答える