Sherman
Mephi
Мультитабличный delete(+)
Mysql 4.0.x
Есть такая струкутра:
cats(cat_ID) - nested sets(категории, дерево).
items(itm_ID, cat_ID) - элементы
params(par_ID) - парамтеры
cats_params(cat_ID, par_ID) - парамтеры категории
items_params(itm_ID, par_ID). - параметры элементов
Задача. Сделать каскадное удаление данных(т.е. мультитабличный delete). Стираем сразу всю ветку категорий и все данные, которые связаны с этой категорией.
В чем сложность.
1. Категории представлены алгоритмом nested sets.
2. Есть условие:
Запись из таблицы params не должна стираться, если есть хотя бы одна запись в таблице cats_params, в которой поле cat_ID не входит в записи в таблице cats, которые следует удалить.
Возможно ли сделать сие одним запросом? У меня на данный момент так:
1. Получаем все cat_ID, котоыре предстоит удалить.
2. Каскадно удаляем записи из таблиц items, items_params, условие: where items.cat_ID in (список cat_ID, полученный в пред. запросе).
3. Удаляем всю ветку категорий(таблица cats).
4. Подчищаем параметры.
Mysql 4.0.x
Есть такая струкутра:
cats(cat_ID) - nested sets(категории, дерево).
items(itm_ID, cat_ID) - элементы
params(par_ID) - парамтеры
cats_params(cat_ID, par_ID) - парамтеры категории
items_params(itm_ID, par_ID). - параметры элементов
Задача. Сделать каскадное удаление данных(т.е. мультитабличный delete). Стираем сразу всю ветку категорий и все данные, которые связаны с этой категорией.
В чем сложность.
1. Категории представлены алгоритмом nested sets.
2. Есть условие:
Запись из таблицы params не должна стираться, если есть хотя бы одна запись в таблице cats_params, в которой поле cat_ID не входит в записи в таблице cats, которые следует удалить.
Возможно ли сделать сие одним запросом? У меня на данный момент так:
1. Получаем все cat_ID, котоыре предстоит удалить.
2. Каскадно удаляем записи из таблиц items, items_params, условие: where items.cat_ID in (список cat_ID, полученный в пред. запросе).
3. Удаляем всю ветку категорий(таблица cats).
4. Подчищаем параметры.