Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Существует ли сложные запросы на удаление?
SELECT t2.id FROM tbl t1 JOIN tbl t2 ON t2.parent_id = t1.parent_id WHERE t1.id = 2
UNIONALL
SELECT t3.id FROM tbl t1 JOIN tbl t2 ON t2.parent_id = t1.parent_id JOIN tbl t3 ON t3.parent_id = t2.parent_id WHERE t1.id = 2
...;
DELETEFROM tbl WHERE id IN(SELECT*FROM __tmp)
2. Создать строковый столбец pathToRoot, содержащий для каждой строки путь к ней со всеми айдишками с разделителем типа 0,2,33,44
и удалить delete from tbl where pathToRoot like '0,2,%'.
pathToRoot обновлять триггером при вставке и обновлении. Правда для обновления значений pathToRoot в дочерних строках придется дополнительно вызывать что-то типа update tbl set id=id чтобы триггер всё проставил (либо делать update + replace приложением)
3. Внешний ключ с каскадным удалением (не знаю, будет ли работать, но почему бы нет)
shum0531
Отправлено: 09 Августа, 2013 - 10:21:58
Гость
Покинул форум
Сообщений всего: 92
Дата рег-ции: Янв. 2013
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.