|
|
|
| Есть таблица country:
id_country------------name--------id_parent
------1-----------------Россия-------------0
------2--------Московская область----1
|
Есть таблица pynkt:
id_pynkt---------name------statys-----id_parent
------1-----------Ступино-----город----------2
|
Так вот, застрял на том, как реализовать удаление. А именно: к примеру мне надо удалить Россию, соответственно нужно проверить нет ли вложенных подразделов в этом разделе и городов соответственно, притом хочу заметить, что вложенность может быть какой угодно!
Вот что пока удалось реализовать:
<?php
// Соединяемся с базой данных
require_once("../config.php");
// Проверяем, нет ли у удаляемого пункта подпунктов, если есть - удаляем их
$query_razdel = "DELETE FROM country WHERE id_parent=".$_GET['id_country'];
if(mysql_query($query_razdel))
{
} else echo mysql_error();
// Выполняем запрос на удаление области
$query = "DELETE FROM country
WHERE id_country=".$_GET['id_country'];
if(mysql_query($query))
{
// Осуществляем автоматический переход на главную страницу
// администрирования статей
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh'
CONTENT='0; URL=index.php'>
</HEAD></HTML>";
} else puterror("Ошибка при удалении раздела");
?>
|
Только такой подход как раз не решает проблему бесконечной вложенности:( | |
|
|
|
|
|
|
|
для: Dizels
(06.10.2007 в 17:59)
| | Вы используете таблицы InnoDB или MyISAM? | |
|
|
|
|
|
|
|
для: cheops
(07.10.2007 в 10:06)
| | MyISAM | |
|
|
|
|
|
|
|
для: Dizels
(07.10.2007 в 17:54)
| | Тогда следует воспользоваться рекурсивной функцией, которая будет спускаться вниз по дереву, удаляя в том числе и вложенные подкаталоги
<?php
// Соединяемся с базой данных
require_once("../config.php");
function recurse_delete($id_country)
{
$query = "SELECT * FROM country
WHERE id_parent=$id_country";
$cnt = mysql_query($query);
if(!$cnt) puterror("Ошибка при удалении раздела");
if(mysql_num_rows($cnt))
{
while($country_child = mysql_fetch_array($cnt))
{
recurse_delete($country_child['id_country']);
}
}
// Проверяем, нет ли у удаляемого пункта подпунктов, если есть - удаляем их
$query = "DELETE FROM country
WHERE id_parent=$id_country";
if(!mysql_query($query)) puterror("Ошибка при удалении раздела");
// Выполняем запрос на удаление области
$query = "DELETE FROM country
WHERE id_country=$id_country";
if(!mysql_query($query)) puterror("Ошибка при удалении раздела");
}
// Вызываем рекурсивную функцию
recurse_delete($_GET['id_country']);
// Осуществляем автоматический переход на главную страницу
// администрирования статей
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh'
CONTENT='0; URL=index.php'>
</HEAD></HTML>";
?>
|
| |
|
|
|