ФорумРазработкаБазы данных → Delete childs... MySql

Delete childs... MySql

  • AlexanderC

    Сообщения: 270 Репутация: N Группа: Кто попало

    Spritz 28 марта 2012 г. 13:49

    Как лучше удалять дотчернии записи если удалена родительская… Связка по айди, таблица та-же?
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 28 марта 2012 г. 14:21, спустя 31 минуту 52 секунды

    триггером
    Сапожник без сапог
  • AlexanderC

    Сообщения: 270 Репутация: N Группа: Кто попало

    Spritz 28 марта 2012 г. 14:24, спустя 3 минуты 38 секунд

    тригер не работает для той же таблицы
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 28 марта 2012 г. 14:26, спустя 1 минуту 55 секунд

    Связка по айди, таблица та-же?

    я думал это вопрос и надо выбрать :-)

    ну тогда все равно тригер, думаю что решение есть эни вей, осталось его найти) если не влом будет даже посмотрю, интересная задачка
    Сапожник без сапог
  • AlexanderC

    Сообщения: 270 Репутация: N Группа: Кто попало

    Spritz 28 марта 2012 г. 14:29, спустя 2 минуты 53 секунды

    да знаю… где-то нарыл что форейн неи работают… нот увы это не так (проверял на инодб). Тригеры точно не работают- ограничения есть на оф сайте… вот и блин не знаю даже… то ли выборку делать ин потом "уэр ин", хотя тут с любой стороны косячёк получается. Короче будет очень интерестно найти безкостыльное решение.
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 28 марта 2012 г. 16:02, спустя 1 час 33 минуты 9 секунд

    FK onDelete="CASCADE" для той же таблицы не работает. Так что руцями нужно подчищать все. У нас схема Ajarency Lists + Closure Table - так что удалить всех потомков очень легко
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 28 марта 2012 г. 17:20, спустя 1 час 17 минут 34 секунды

    В чём проблема выполнения дополнительного запроса? Один хрен связь то же самое сделает
  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 28 марта 2012 г. 17:49, спустя 29 минут 1 секунду

    Ivan, а если это дерево?
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 28 марта 2012 г. 20:38, спустя 2 часа 49 минут 16 секунд

    это нужно в скрипте делать, а не в базе, потому что с записями могут быть ассоциированы нетабличные данные, например, файлы. а для защиты целостности нужно вешать внешние ключи ON DELETE NO ACTION ON UPDATE NO ACTION
    не всё полезно, что в swap полезло
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 29 марта 2012 г. 1:34, спустя 4 часа 55 минут 30 секунд


    Ivan, а если это дерево?


    Ну, разве что в таком случае
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 29 марта 2012 г. 3:16, спустя 1 час 41 минуту 59 секунд


    это нужно в скрипте делать, а не в базе, потому что с записями могут быть ассоциированы нетабличные данные, например, файлы. а для защиты целостности нужно вешать внешние ключи ON DELETE NO ACTION ON UPDATE NO ACTION
    Тоже нигде не используем CASCADE. Только вместо NO ACTION юзаем RESTRICT. Для mysql разницы нет, а вот в других бд отличие в том, что но экшен проверяется в конце транзакции, а рестрикт непосредственно во время попытки удаления строки, поэтому, если транзакция сложная, возникающая ошибка отлавливается чуть раньше.

    Вообще есть ли смысл при удалении нода удалять и все дочерние узлы? Просто есть реально деревянные люди, которые никогда не читают то, что выскакивает в попап окошках: например на сайте при удалении не пустого раздела выскакивает окошко с сообщением "В разделе находится 100500 статей и 100600 подразделов, при удалении все они будут удалены. Вы действительно хотите удалить этот раздел?", и человек по привычке тыкает, да, удалить, и песец, потом истерики, да как же так, я две недели статьи строчила, что за херня. Поэтому лучшим поведением будет либо не удалять не пустые узлы, а заставлять перед этим всё внутри ручками удалить или перместить в другой узел, либо удалять сам узел, а всех его детей поднимать на уровень выше на место удалённого узла.
    Work, buy, consume, die
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 29 марта 2012 г. 3:54, спустя 38 минут 37 секунд

    либо удалять сам узел, а всех его детей поднимать на уровень выше на место удалённого узла.

    пиздец бесит такое поведение )
    а заставлять перед этим всё внутри ручками удалить или перместить в другой узел

    вот это ужо другое дело, еще если есть bulk-actions то вообще супер )
    Просто есть реально деревянные люди, которые никогда не читают то, что выскакивает в попап окошках

    +100500 )))
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 29 марта 2012 г. 10:35, спустя 6 часов 40 минут 12 секунд

    Nyaah, как вариант - не удалять, а помечать к удалению
    не всё полезно, что в swap полезло
  • AlexanderC

    Сообщения: 270 Репутация: N Группа: Кто попало

    Spritz 29 марта 2012 г. 14:17, спустя 3 часа 41 минуту 59 секунд

    в фронтенде данные показаны ввиде дерева- по этому будет логично удалять все дотчерние записи… реализавал не в мускуле а как изначально было в мыслях- код конечно пару строчек и не сложный, но вот думал можно что-то скюэльное нарыть
    Спустя 158 сек.
    … Ajarency Lists (если точнее adjarency)- это то с чем я не сталкивался после окончания изучения графов…

Пожалуйста, авторизуйтесь, чтобы написать комментарий!