2

私のデータベースには、categoriID、categoriAd、categoriEbeveyn を含むテーブルが 1 つあります。これは、categoryID、categoryName、categoryParent のようなものです。

メインカテゴリを削除しようとすると、メインカテゴリとサブカテゴリを削除できます。

-世界

.......... +ヨーロッパ

....................... *七面鳥

...................................**イスタンブール

削除しようとすると、この機能はワールドとヨーロッパで機能します。しかし、トルコとイスタンブールはまだ私のデータベースにあります. エラーのため削除できませんでした。

「mysql_fetch_array() は、パラメーター 1 がリソースであると想定しており、ブール値で指定されています」

| | カテゴリーID | カテゴリ広告 | カテゴリEbeveyn |

| | 1 | 世界 | 世界 0 |

| | 2 | ヨーロッパ | ヨーロッパ | 1 |

| | 3 | トルコ | 2 |

| | 4 | イスタンブール | 3 |

これが私の機能です。

<?php

function KategoriVeAltKategorileriSil(){
$kategoriID = $_GET['kategoriID'];
     mysql_query("DELETE FROM kategoriler WHERE kategoriID = ' $kategoriID '") or die (mysql_error());
       $delete = mysql_query("DELETE FROM kategoriler WHERE kategoriEbeveyn = ' $kategoriID ' ") or die (mysql_error());        

    if($delete){
         while($silinecek = mysql_fetch_array($delete)){

               KategoriVeAltKategorileriSil($silenecek[' kategoriID ']);
             echo mysql_error();
                     }
    echo "Kategori ve alt kategorileri silindi.";
    }else{ echo "Silme işlemi gerçekleştirilemedi!" .mysql_error(); }
        }

?>

または、トリガーを使用する必要がありますか?

4

3 に答える 3

4
    function deleteCategory($kategoriID) {
        $result=mysql_query("SELECT * FROM kategoriler WHERE kategoriEbeveyn='$kategoriID'");
        if (mysql_num_rows($result)>0) {
             while($row=mysql_fetch_array($result)) {
                  deleteCategory($row['kategoriID']);
             }
        }
        mysql_query("DELETE FROM kategoriler WHERE kategoriID='$kategoriID'");
    }

you can use this recursive function
于 2013-03-08T11:40:41.657 に答える
0

最善の方法は、次のようなリクエストを行うことです。

DELETE FROM kategoriler WHERE ketegoriID IN (SELECT kategoriID
FROM kategoriler
WHERE kategoriID = ' $kategoriID ' or kategoriEbeveyn = ' $kategoriID ');

もちろん、データベースの構造がわからないため、完全ではありません。

于 2013-03-08T11:35:30.673 に答える
0

要点は、DB のフラット (行) 構造にマップされたツリー構造を持っているということです。

これは、再帰的な削除メソッドで処理する必要があります。

コードはおそらく次のようになります。

function DeleteCategory(catId)
{
    GetChildCategoriesOf(catId)

    if (num_rows > 0)
    {
         foreach(ChildCategoryFound)
         {
              DeleteCategory(ChildCatId); //Recursive call
         }
    }

    Delete(catId) //Delete the parent as last action
}
于 2013-03-08T11:44:24.203 に答える