Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Деревья в DB это один из самых острых вопросов при работе с данными
так тоже проще. просто выбираем
SELECT * FROM tree
WHERE id != :id
AND array[id] && (
SELECT btree
FROM tree
WHERE id = :id
)
ORDER BY btree;И опять обходимся без рекурсии. Можно так же самому достать id родителей и просто выбрать селектом с помощью команды IN
Я бы уточнил в реляционных базах данных.Замечание по делу. Поправил. А работа с нереляционными базами данных — тема для отдельного топика. Они настолько разные, что наверное можно диссертацию написать.
Плотно работаю с Нео4ж (comunity edition)— Очень интересно, нужно будет попробовать. Спасибо за наводку.
А что будет если нужно узнать для произвольного элемента цепочку всех элементов до корневого элемента?
В случае MP, разве это не то, что хранится для эл-та в поле btree? Ответ в таком случае будет
SELECT btree FROM tree WHERE id = :idИли я заработался и не понял вопроса?
SQL Trees. RALПо описанию автора все тот же самый добрый Materialized Path. Сделал бы по описанному выше методу — не пришлось бы ждать заполнения данных так долго. В моем случае миллион записей субъективно заполнилось за минут 20. Но сама попытка попробовать свое и приход к выводу хранения всех родителей очень хороший результат.
Снова о деревьях