我的数据库中有一个表,包括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吗?
答案 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
}