2

我的数据库中有一张表,其中包括 kategoriID、kategoriAd、kategoriEbeveyn。它类似于 categoryID、categoryName 和 categoryParent。

我希望发生这种情况,即当我尝试删除主类别时,我可以删除主类别和子类别。

-世界

...... +欧洲

....................... *火鸡

..................................**伊斯坦布尔

当我尝试删除时,此功能适用于世界和欧洲。但土耳其和伊斯坦布尔仍在我的数据库中。由于错误,我无法删除它们。

“mysql_fetch_array() 期望参数 1 是资源,给出的布尔值”

| 类别ID | 分类广告 | 类别Ebeeveyn |

| 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 回答