Здраствуйте, есть вопрос по Nested Sets. Кто работал с этим алгоритмом знает, что там при добавление узла в дерево необходимо обновить ключи таким запросом [sql]UPDATE my_tree SET right_key = right_key + 2, left_key = IF(left_key > $right_key, left_key + 2, left_key) WHERE right_key >= $right_key [/sql] а потом уже вбивать узел вот таким запросом [sql]INSERT INTO my_tree SET left_key = $right_key, right_key = $right_key + 1, level = $level + 1[/sql] получается, что надо сначала обновить ключи, а потом добавлять узел. Но если при обновлении произойдет аппаратный сбой или ошибка в программе, то узел может быть не добавлен. Произойдет обновление ключей, а узел не будет добавлен. Такое можно исправить транзакцией, сделать эти два дейтвия за одну транзакцию, а вот можно ли это сделать как-нибудь без транзакции?
Можно, в "временной" таблице. Создаем новую таблицу Выбираем в нее дерево и там апдейтим ключи. Затем добавляем туда же узел. Если все успешно, то дропаем исходную таблицу, а новую переименовываем. Но, как по мне, транзакции удобнее.
Можно при выборке - если обнаруживается, что значения ключей не соответствует узлам, то пересчитывать и обновлять ключи. Хотя хосты, на которых нет даже InnoDB - это плохие хосты, ими не надо пользоваться
http://www.majordomo.ru http://www.host.ru InnoDB есть даже на дешевых хостингах, типа http://www.rus-hosting.ru