Mysql查询正在工作但不进入循环,PHP,MYSQL

时间:2013-03-08 11:26:46

标签: php mysql categories

我的数据库中有一个表,包括kategoriID,kategoriAd,kategoriEbeveyn。 它类似于categoryID,catagoryName和categoryParent。

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

- 世界

............ +欧洲

....................... *土耳其

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

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

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

中给出

| kategoriID | kategoriAd | kategoriEbeveyn |

| 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(); }
        }

?>

或者我需要使用Trigger吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

最好的方法是提出如下请求:

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

当然它不完整,因为我不知道你的数据库结构

答案 2 :(得分:0)

嗯,关键是你有一个树结构映射到数据库的平面(行)结构。

您需要使用递归删除方法处理此问题。

您的代码应该类似于:

function DeleteCategory(catId)
{
    GetChildCategoriesOf(catId)

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

    Delete(catId) //Delete the parent as last action
}