Появился ли способ вывода из мускула иерархических данных? Типа id | name | parent_id ? По сути вложенные множества задача обычная, не сложная, но почему-то разработчики игнорят сделать наконец-то простой и удобный вывод "дерева" через один запрос, чтобы не пришлось выкручиваться всякими дополнительными функциями для разбора типа Код (PHP): function array_to_tree(array $array, $parent_id = 0) { $array = array_combine(array_column ($array, 'id'), array_values($array)); foreach ($array as $k => &$v) { if (isset($array[$v['parent_id']])) { $array[$v['parent_id']]['children'][$k] = &$v; } unset($v); } return array_filter($array, function($v) use ($parent_id) { return $v['parent_id'] == $parent_id; }); } Добавлено спустя 12 минут 40 секунд: На сайте explainextended(точка)com/2009/07/20/hierarchical-data-in-mysql-parents-and-children-in-one-query/ приводится интересный пример такого запроса, ко всему прочему прибавляется колонка level, зачем думаю будет понятно из запроса: Код (Text): SELECT CONCAT(REPEAT(' ', level - 1), CAST(id AS CHAR)), parent, level FROM ( SELECT id, parent, IF(ancestry, @cl := @cl + 1, level + @cl) AS level FROM ( SELECT TRUE AS ancestry, _id AS id, parent, level FROM ( SELECT @r AS _id, ( SELECT @r := parent FROM t_hierarchy WHERE id = _id ) AS parent, @l := @l + 1 AS level FROM ( SELECT @r := 1218, @l := 0, @cl := 0 ) vars, t_hierarchy h WHERE @r <> 0 ORDER BY level DESC ) qi UNION ALL SELECT FALSE, hi.id, parent, level FROM ( SELECT hierarchy_connect_by_parent_eq_prior_id(id) AS id, @level AS level FROM ( SELECT @start_with := 1218, @id := @start_with, @level := 0 ) vars, t_hierarchy WHERE @id IS NOT NULL ) ho JOIN t_hierarchy hi ON hi.id = ho.id ) q ) q2 Давайте обсудим это, кому интересно! Есть ли конструкции поадекватнее? Кажется только в mysql не реализована понятная и простая возможность вывода деревьев..
Re: "Деревья" без премудростей (в одном удобном запросе mysq nested sets, materialied path, closures. чего не хватает? http://www.slideshare.net/billkarwin/models-for-hierarchical-data
Re: "Деревья" без премудростей (в одном удобном запросе mysq Код (Text): select * from tree order by left_key ну хер знает куда вам еще проще... в форум для блондинок?
Re: "Деревья" без премудростей (в одном удобном запросе mysq artoodetoo привёл отличную табличку "многострадальных схем". Adjacency List - самый логичный и красивый вариант, остаётся только "изменить" исполнение "Hard" на "Easy" у Query Subtree. Это тема для обсуждения, быть может что-то придумали новое. К примеру, Код (Text): SELECT LPAD(' ', level * 4, ' ') || id, parent, level FROM t_hierarchy START WITH parent = 0 CONNECT BY parent = PRIOR id очень просто в Oracle, не так ли? START WITH определяет root дерева, и CONNECT BY связывает родителя с потомками. Не хочется верить что в Mysql так и не решен вопрос, быть может есть вариант потому и спрашиваю, чтобы не менять кардинально схемы на "чистое зло" типа нестед сетс. Моё мнение. Не поддерживаете точку зрения, не надо, хотелось бы обсудить с теми, кто придерживается подобного взгляда.
Re: "Деревья" без премудростей (в одном удобном запросе mysq artoodetoo, неплохая презентация. но надо субъективно тестировать в разных вариантах применения.
Re: "Деревья" без премудростей (в одном удобном запросе mysq Mark32, одного нежелания верить недостаточно в mysql нет встроеных типов для хранения деревьев. поэтому изучай полезные практики. пример с переменными любопытный и только. запрос очень тяжелый. Ganzal, конечно! инструмент подбирается под задачу. если изменения происходят редко, NS будут отличным вариантом.
Re: "Деревья" без премудростей (в одном удобном запросе mysq вот именно. да там каждый пук приводит к обновлению либо всех ключей справа от элемента либо вообще почти всех ключей. но если в задаче не очень часто обновляются данные то дальше уже перфоманс 8-байтного индекса будет поболе чем на реализации PE и не нужно лишних таблиц как в CT. для таких популярных задач как каталоги товаров или списки форумов вполне хватит и NS.
Re: "Деревья" без премудростей (в одном удобном запросе mysq это да. как пример привёл... Для NS принципиально нужна InnoDB ? Можете посоветовать хорошую библиотеку (или просто методы) NS для тестирования?
Re: "Деревья" без премудростей (в одном удобном запросе mysq нет нет тестирование? скажи прямо: "дайте готовое решение". ответ: ищи, их миллион.
Re: "Деревья" без премудростей (в одном удобном запросе mysq В mysql много что не решено, хехе. Используйте нормальные субд, если так хочется рекурсивные запросы.
Re: "Деревья" без премудростей (в одном удобном запросе mysq "Не хочется верить" это в том смысле, что "допилить" можно в принципе всё что угодно, была бы "муза")) А от мускула никуда я не уйду, люблю его братку)) Кстати есть вариант с Adjacency List без рекурсии (в запросе само собой, даже без рекурсии в методе php))))
Re: "Деревья" без премудростей (в одном удобном запросе mysq или "её сестренку"... ходят слухи что приставка май - имя дочери одного из разработчиков субд.