[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Рекурсивное удаление
Гость_Павел
Уважаемые знатоки, подскажите пожалуйста как удалить рекурсивно из базы MySQL записи! С таким условием, чтобы в функцию можно было передать параметр "Родителя", и она уже удалила всех его потомков. Уже много времени бьюсь, пока без результатов.

Id - Id записи (Родитель)
Catid - потомок ID записи
Name - название записи



Спустя 9 минут, 17 секунд (11.12.2010 - 22:38) inpost написал(а):
Выбираешь в отдельную переменную id всех потомков через SELECT, потом удаляешь WHERE `id` IN ('Через запятую')

Спустя 51 минута, 33 секунды (11.12.2010 - 23:30) Guest написал(а):
Цитата (inpost @ 11.12.2010 - 19:38)
Выбираешь в отдельную переменную id всех потомков через SELECT, потом удаляешь WHERE `id` IN ('Через запятую')

Так тут то я и застрял. Как мне выбрать всех потомков. Ведь у выбранных потомков, могут быть еще потомки и т.д. Мне кажется что тут нужна рекурсия. Помогите пожалуйста. Если можно приведите код.

Спустя 13 часов, 18 минут, 56 секунд (12.12.2010 - 12:49) linker написал(а):
Как вариант
function DeleteRecords($Parent)
{
$Resource = mysql_query("SELECT `id` FROM `table` WHERE `parent` = " . $Parent);
while($Row = mysql_fetch_assoc($Resource))
{
mysql_query("DELETE FROM `table` WHERE `id` = " . $Row['id']);
DeleteRecords($Row['id']);
}
}


DeleteRecords($Id);
или так через IN ()
function DeleteRecords($Parent)
{
$Resource = mysql_query("SELECT `id` FROM `table` WHERE `parent` = " . $Parent);
$Records = array();
while($Row = mysql_fetch_assoc($Resource))
$Records[] = $Row['id'];
mysql_query("DELETE FROM `table` WHERE `id` IN (" . implode(',', $Records) . ")");
foreach($Records as $Id)
DeleteRecords($Id);
}

DeleteRecords($Id);

Спустя 2 дня, 1 час, 42 минуты, 3 секунды (14.12.2010 - 14:31) Guest написал(а):
Цитата (linker @ 12.12.2010 - 09:49)
Как вариант
function DeleteRecords($Parent)
{
$Resource = mysql_query("SELECT `id` FROM `table` WHERE `parent` = " . $Parent);
while($Row = mysql_fetch_assoc($Resource))
{
mysql_query("DELETE FROM `table` WHERE `id` = " . $Row['id']);
DeleteRecords($Row['id']);
}
}


DeleteRecords($Id);
или так через IN ()
function DeleteRecords($Parent)
{
$Resource = mysql_query("SELECT `id` FROM `table` WHERE `parent` = " . $Parent);
$Records = array();
while($Row = mysql_fetch_assoc($Resource))
$Records[] = $Row['id'];
mysql_query("DELETE FROM `table` WHERE `id` IN (" . implode(',', $Records) . ")");
foreach($Records as $Id)
DeleteRecords($Id);
}

DeleteRecords($Id);

Отлично! Спасибо! Помогло!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.