Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Удаление из нескольких таблиц.

Сообщения:  [1-4] 

 
 автор: cheops   (08.10.2007 в 11:59)   письмо автору
 
   для: 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(!
$cntputerror("Ошибка при удалении раздела"); 
    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>"

?>

   
 
 автор: Dizels   (07.10.2007 в 17:54)   письмо автору
 
   для: cheops   (07.10.2007 в 10:06)
 

MyISAM

   
 
 автор: cheops   (07.10.2007 в 10:06)   письмо автору
 
   для: Dizels   (06.10.2007 в 17:59)
 

Вы используете таблицы InnoDB или MyISAM?

   
 
 автор: Dizels   (06.10.2007 в 17:59)   письмо автору
 
 

Есть таблица 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("Ошибка при удалении раздела");

?>

Только такой подход как раз не решает проблему бесконечной вложенности:(

   

Сообщения:  [1-4] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования